PokéGAN

Semesterprojekt im Studiengang Mobile Medien an der Hochschule der Medien.

Projektmitglieder:
Nico Burkart (Kürzel: nb094, Matrikel Nr. 34924),
Jonas Wolfram (Kürzel: jw132, Matrikel Nr. 35589)

Betreuer:
Prof. Dr. Joachim Charzinski

Projektzeitraum:
WS20/21

Inhaltsverzeichnis

  1. Allgemeiner Teil
    1.1. Was ist ein GAN (Generative Adversarial Network)?
    1.2. Aufbau eines GANs
    1.3. Ziel eines GANs
  2. Projektbezogener Teil
    2.1. Projektziele / Nicht-Ziele
     2.1.1. Muss-Ziele
     2.1.2. Kann-Ziele
    
    2.2. Implementation
     2.2.1. Vorwort
     2.2.2. Imports
     2.2.3. Analysieren der Trainingsdaten
     2.2.4. Vorbereiten der Daten
     2.2.5. Architektur des Generators
     2.2.6. Probe des untrainierten Generators
     2.2.7. Architektur des Diskriminators
     2.2.8. Definition der Fehlerfunktionen
     2.2.9. Definition der Optimierer
     2.2.10. Definition der Trainingsfunktion
     2.2.11. Konstanten
     2.2.12. Training
     2.2.13. Auswertung
    
    2.3. Probleme und Lösungen
    2.4. Projektmanagement
     2.4.1. Aufgabenaufteilung
     2.4.2. Zeitplanung
    
    2.5. Fazit

1. Allgemeiner Teil

1.1. Was ist ein GAN (Generative Adversarial Network)?

Ein GAN ist eine Gruppe von zwei neuronalen Netzen, welche im maschinellen Lernen dazu eingesetzt werden können neue Daten, welche den Trainingsdaten zum verwechseln ähnlich sehen, zu generieren.

1.2. Aufbau eines GANs

In [12]:
from IPython.display import Image
Image("assets/images/gan_diagram.png")
Out[12]:

Ein GAN besteht aus zwei neuronalen Netzen, dem Diskriminator (blau) und dem Generator (rot). Der Generator erstellt aus einem Vektor mit zufälligen Werten (weiß) eine Probe (grau, unten). Der Diskriminator bekommt als Input eine Probe aus den Trainingsdaten (grau, oben) und die Probe des Generators (grau, unten) und klassifiziert die Proben jeweils entweder als "echt" oder als "fake". Auf Basis dieser Klassifizierungen können die Kosten (Discriminator loss und Generator loss) berechnet werden, durch die die Netzwerke optimiert werden können.

1.3. Ziel eines GANs

Das Ziel des Generators ist Bilder zu erstellen, die der Diskriminator als "echt" klassifiziert. Der Diskriminator versucht sich dahingehend zu optimieren, dass er die Proben (grau) immer richtig klassifiziert. Beim Trainieren eines GANs versucht man das Gleichgewicht beider Modelle herzustellen. Wenn dies gewährleistet wird, lernt der Diskriminator die Merkmale der Trainingsdaten und gibt dem Generator auf Basis des Gelernten Feedback zu den generierten Proben, wodurch sich der Generator entsprechend anpasst und das Generierte immer mehr Ähnlichkeit zu den Trainingsdaten bekommmt. Irgendwann sind die generierten Proben nicht mehr zu unterscheiden von den echten Daten.

2. Projektbezogener Teil

2.1. Projektziele / Nicht-Ziele

2.1.1. Muss-Ziele

  • Mit einem GAN (Generative Adversarial Network) müssen neue Pokémon-ähnliche 2D Bilder generiert werden können.
  • Wir wollen keine Animationen oder 3D Bilder generieren (wie die Pokémon aus den neueren Generationen).
  • Es sollen komplett neue Pokémon generiert werden. Höchstens Ähnlichkeiten zu existierenden Pokémon dürfen sichtbar sein.
  • Das GAN muss selbst implementiert werden (Programmierung eines Diskriminators und Generators mit Hilfe der Library Tensorflow).
  • Das trainierte Model muss Ergebnisse liefern, die einem Pokémon weitestgehend ähnlichsehen.
  • Quellcode, Ablauf, Erfahrungen, Probleme und Lösungen müssen in einem Jupyter Notebook dokumentiert und veranschaulicht werden.
  • Das Projekt muss bei der MediaNight (04.02.2021) lauffähig sein und muss dort vorgestellt werden. Für die Vorstellung des Projekts muss vorher ein Konzept entwickelt werden.
  • Das Projekt muss beim MI-Präsentationstag (03.02.2021) innerhalb einer Präsentation vorgestellt werden.

2.1.2. Kann-Ziele

  • Eine Landingpage soll erstellt werden, die das Projekt für die MediaNight vorstellt. Auf dieser kann man mit Hilfe des Generators neue Pokémon erschaffen.

2.2. Implementation

2.2.1. Vorwort

In unserem Projekt verwenden wir eine Art eines GANs namens DCGAN (Deep Convolutional Generative Adversarial Network). Bei einem DCGAN sind beide neuronalen Netze CNNs (Convolutional Neural Networks), welche sich vor allem eignen, wenn der Datensatz aus Bildern besteht. Der Vorteil von CNNs gegenüber herkömmlichen neuronalen Netzen ist, dass diese Merkmale auch erkennen, wenn z.B. die Position des Merkmals unter den verschiedenen Bildern variiert. Dementsprechend eignet sich diese Art von GAN für unseren Anwendungsfall (i.e. Neue Pokémon generieren welche Merkmale von bereits existierenden haben) sehr gut. Die Idee für diese Art des GANs stammt aus dem Paper "Unsupervised representation learning with deep convolutional generative adversarial networks" (Alec Radford et al., 2016, https://arxiv.org/pdf/1511.06434.pdf), auf dem die Umsetzung dieses Projekt größtenteils beruht.

2.2.2. Imports

Zuerst müssen wir die notwendigen Libraries und Module für die Implementierung eines GANs einbinden.

Für die Erstellung und das Training des GANs verwenden wir die Library tensorflow.keras. Ansonsten werden herkömmliche Machine Learning Libraries eingebunden (z.B. numpy). Zusätzlich binden wir noch eigene Module ein (ImageController, Evaluator, SaveController), welche sich im Hintergrund um das Anzeigen von Bildern, von Diagrammen und das Speichern der Modelle kümmern.

In [67]:
import tensorflow as tf
from tensorflow.keras.layers import Dense, Activation, ReLU, LeakyReLU, Reshape, Conv2DTranspose, Conv2D, BatchNormalization, Dropout, Flatten, InputLayer
from tensorflow.keras.models import Sequential
from tensorflow.keras.losses import BinaryCrossentropy
from tensorflow.keras.metrics import BinaryAccuracy
from tensorflow.keras.initializers import RandomNormal
import numpy as np
import os
import ImageController, Evaluator, SaveController
import time

2.2.3. Analysieren der Trainingsdaten

Im nächsten Schritt machen wir uns mit den Trainingsdaten vertraut, indem wir uns ein paar Beispiele anschauen. Für unser GAN verwenden wir ausschließlich Pokémon Portraits. Wir vermuten, dass dadurch eine größere Schnittmenge an Features unter den Bildern vorkommt, wodurch es dem GAN einfacher fällt Ähnliches zu generieren. (Datensatz: https://www.kaggle.com/brilja/pokemon-mugshots-from-super-mystery-dungeon)

In [68]:
image_dir_url = 'data'

ImageController.plot_random_images(image_dir_url)

2.2.4. Vorbereiten der Daten

Als nächstes laden wir nun alle Bilder als Vektoren und müssen, um diese Daten nun optimal benutzen zu können, die Daten noch skalieren. Sie werden von herkömmlichen RGB Werten 0 - 255 auf Werte von -1 - 1 skaliert, damit sie die gleiche Form haben wie der Output des Generators.

In [69]:
train_images = ImageController.load_all_images(image_dir_url).astype('float32')
# Images should be normalized to a range of -1 to 1 in order to match the output of the generator.
train_images = (train_images - 127.5) / 127.5

BUFFER_SIZE = len(train_images)
BATCH_SIZE = 128

# This creates an iterator object which serves batches of size BATCH_SIZE consisting of random normalized images once iterated over.
train_dataset = tf.data.Dataset.from_tensor_slices(tensors=train_images).shuffle(buffer_size=BUFFER_SIZE).batch(batch_size=BATCH_SIZE, drop_remainder=True)

print(f'The shape of the dataset:\n{train_images.shape}')
The shape of the dataset:
(4881, 64, 64, 3)

Der Datensatz besteht aus 4881 Pokémon Bildern mit einer Breite von 64 Pixeln, einer Höhe von 64 Pixeln und 3 Kanälen (RGB).

2.2.5. Architektur des Generators

In [13]:
Image("assets/images/1_rdXKdyfNjorzP10ZA3yNmQ.png")
Out[13]:

Der Aufbau und die Eigenschaften des Generators wurden größtenteils aus dem oben genannten Paper übernommen.

Folgende Eigenschaften wurden übernommen:

  • 100-dimensionaler Input Vektor mit zufälligen Werten (Noise) --> Der Generator soll jedes mal ein neues Bild erstellen. 100 zufällige Input Werte sind dafür ausreichend.
  • Dense Layer --> Um den Input Vektor auf die nötigen Dimensionen zu erweitern.
  • Reshape Layer --> Um den Vektor in eine Matrix umzuformen. Dies ist nötig, da Layer von CNNs (Convolutional Layer) Berechnungen mit Matrizen machen, anstatt mit Vektoren (wie herkömmliche neuronale Netze)
  • Upsampling durch strided-convolutions (4x4 --> 8x8 --> 16x16 --> 32x32 --> 64x64) --> Mit Hilfe von strided-convolutions können wir die Größe der Matrix erweitern, sodass wir zum Schluss eine Matrix haben (64x64), die identisch ist mit den Dimensionen eines Pokémon Bildes (Breite: 64px, Höhe: 64px).
  • Abnehmende Filter Anzahl ( 1024 --> 512 --> 256 --> 128 --> 3) --> Die Filter Anzahl ist die Anzahl der Kanäle (i.e. die Tiefendimension). Ein normales RGB-Bild hat 3 Kanäle, weswegen wir hier Layer für Layer die Kanäle reduzieren, bis wir nur noch 3 haben.
  • In jedem Convolutional Layer wird eine kernel_size von 5 verwendet --> Es hat sich herausgestellt, dass diese Filtergröße gut geeignet ist, um aussagekräftige Merkmale zu lernen.
  • ReLU Aktivierungsfunktion nach den Convolutions und Tanh für den Output --> ReLU Funktionen werden in tiefen neuronalen Netzen typischerweise verwendet, um nicht lineare Zusammenhänge zu ergründen. Tanh wird verwendet, um im Output-Layer die Ergebnisse auf eine Range von -1 bis 1 zu begrenzen.
  • Batch Normalization nach dem Dense und den Convolution Layern (jedoch nicht nach dem Output Layer) --> Batch Normalization wird verwendet, um die Ergebnisse zwischen den Layern zu skalieren. Durch die Skalierung auf eine Normalverteilung wird die Convergence Geschwindigkeit erhöht (Die Zeit die es benötigt bis ein Modell fertig gelernt hat und sich das Ergebnis der Kostenfunktion nicht mehr verbessern kann) und die Werte unterschiedlicher Merkmale können verglichen werden, da sie nun einheitlich skaliert wurden.
  • Weight intitialization mit Standardabweichung 0.02 anstatt 0.01 --> Die Gewichte der einzelnen Convolutional Layer werden in tensorflow.keras standardmäßig initiiert mit einem Mittelwert von 0 und einer Standardabweichung von 0.01. Im oben genannten Paper wird empfohlen die Standardabweichung auf 0.02 zu erhöhen.
In [70]:
# The kernel initializer defines how the weights in a neural network layer should be initialized. This has a direct effect on convergence speed. A recommended Distribution for training DCGANs is the following:
generator_kernel_initializer = RandomNormal(stddev=0.02)

def create_generator(noise_dimensions):
    model = Sequential()

    model.add(InputLayer(input_shape=(noise_dimensions,)))

    # First layer has to be a dense layer which expands the noise vector. This has to be done to create the required 16.384 values which after being reshaped form the input feature maps for the first deconvolutional layer.
    model.add(Dense(units=4 * 4 * 1024, kernel_initializer=generator_kernel_initializer, use_bias=False))
    model.add(BatchNormalization())

    model.add(Reshape(target_shape=(4, 4, 1024)))

    # The output feature maps of the first deconvolutional layer have a shape of (8, 8, 512). This could be achieved by the stride set to 2 and padding set to 'same' which basically doubles the size of the image (i.e. the pixels).
    model.add(Conv2DTranspose(filters=512, kernel_size=(5, 5), kernel_initializer=generator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(ReLU())

    # After the second one there are 256 feature maps with a size of 16x16 left.
    model.add(Conv2DTranspose(filters=256, kernel_size=(5, 5), kernel_initializer=generator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(ReLU())

    # After the third block there are only 128 feature maps with a size of 32x32 left.
    model.add(Conv2DTranspose(filters=128, kernel_size=(5, 5), kernel_initializer=generator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(ReLU())

    # After the last deconvolutional layer the output has a size of 64x64x3 (RGB image with a width and height of 64px).
    model.add(Conv2DTranspose(filters=3, kernel_size=(5, 5), kernel_initializer=generator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    # Tanh activation function is used to scale the values between -1 and 1 (same range as the preprocessed real images).
    model.add(Activation(activation='tanh'))

    assert model.output_shape == (None, 64, 64, 3)

    return model
In [71]:
# Definition of the dimensionality of the noise vector:
NOISE_DIMENSIONS = 100
In [72]:
generator = create_generator(NOISE_DIMENSIONS)

print('The topography of the generator\'s model:\n')
generator.summary()
The topography of the generator's model:

Model: "sequential_6"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_6 (Dense)              (None, 16384)             1638400   
_________________________________________________________________
batch_normalization_27 (Batc (None, 16384)             65536     
_________________________________________________________________
reshape_3 (Reshape)          (None, 4, 4, 1024)        0         
_________________________________________________________________
conv2d_transpose_12 (Conv2DT (None, 8, 8, 512)         13107200  
_________________________________________________________________
batch_normalization_28 (Batc (None, 8, 8, 512)         2048      
_________________________________________________________________
re_lu_9 (ReLU)               (None, 8, 8, 512)         0         
_________________________________________________________________
conv2d_transpose_13 (Conv2DT (None, 16, 16, 256)       3276800   
_________________________________________________________________
batch_normalization_29 (Batc (None, 16, 16, 256)       1024      
_________________________________________________________________
re_lu_10 (ReLU)              (None, 16, 16, 256)       0         
_________________________________________________________________
conv2d_transpose_14 (Conv2DT (None, 32, 32, 128)       819200    
_________________________________________________________________
batch_normalization_30 (Batc (None, 32, 32, 128)       512       
_________________________________________________________________
re_lu_11 (ReLU)              (None, 32, 32, 128)       0         
_________________________________________________________________
conv2d_transpose_15 (Conv2DT (None, 64, 64, 3)         9600      
_________________________________________________________________
activation_6 (Activation)    (None, 64, 64, 3)         0         
=================================================================
Total params: 18,920,320
Trainable params: 18,885,760
Non-trainable params: 34,560
_________________________________________________________________

2.2.6. Probe des untrainierten Generators

In der folgenden Zelle werden probeweise aus 16 100-dimensionalen Vektoren 16 Bilder durch den untrainierten Generator erstellt.

In [73]:
# Definition of how many sample images should be plotted and saved every epoch to monitor the progress:
EXAMPLES_TO_GENERATE = 16

# A seed is set so that each time the program is restarted the same vector is created. This is essential for reproducability.
tf.random.set_seed(0)
# The seed is a pseudo-random vector used throughout the training to generate images and compare the generator's output between different training epochs.
seed = tf.random.normal(shape=[EXAMPLES_TO_GENERATE, NOISE_DIMENSIONS])

print(f'The shape of the seed:\n{seed.shape}')
The shape of the seed:
(16, 100)
In [74]:
ImageController.generate_and_plot_images(generator, seed)

Man kann erkennen, dass die Bilder grau sind. Dies ist logisch, da derzeit alle trainierbaren Parameter normalverteilt sind. Die Werte liegen um den Mittelwert 0. Nachdem sie nun auf die Range 0 bis 255 skaliert werden (Standardwerte für Pixel), liegen alle in etwa bei der Hälfte (i.e. 128). Dadurch entsteht der graue Farbton.

2.2.7. Architektur des Diskriminators

In [14]:
Image("assets/images/dcgan.png")
Out[14]:

Der Diskriminator ist im DCGAN das Spiegelbild des Generators. Die gesamte Architektur des Generators wird gespiegelt. Für den Diskriminator haben wir ebenso größtenteils die Empfehlungen von Alec Redford et al. übernommen, sowie noch einige Anpassungen vorgenommen.

Übernommene Eigenschaften:

  • Input Bild mit Breite, Höhe, Tiefe von 64x64x3 --> Ein Standard RGB Bild mit den Dimensionen 64x64
  • Downsampling durch strided-convolutions (64x64 --> 32x32 --> 16x16 --> 8x8 --> 4x4) --> Mit Hilfe von strided-convolutions können wir die Größe der Matrix verringern.
  • Zunehmende Filter Anzahl (3 --> 128 --> 256 --> 512 --> 1024) --> Die Filter Anzahl ist die Anzahl der Kanäle (i.e. die Tiefendimension). Ein normales RGB-Bild hat 3 Kanäle. Um aus diesem Bild möglichst viele gute Merkmale zu extrahieren wird die Anzahl der Filter Layer für Layer erhöht.
  • In jedem Convolutional Layer wird eine kernel_size von 5 verwendet --> Es hat sich herausgestellt, dass diese Filtergröße gut geeignet ist, um aussagekräftige Merkmale zu lernen.
  • Flatten Layer --> Wird verwendet, um die Matrizen nach den Convolution Layer wieder in einen einzigen Vektor umzuwandeln.
  • Dense Layer --> Das Output Layer. Es enthält ein Neuron, da wir nur einen Output Wert brauchen.
  • Leaky ReLU Aktivierungsfunktion nach den Convolutions und Sigmoid für den Output --> Die Leaky ReLU Funktion ist sehr ähnlich zu der ReLU Funktion, jedoch wirkt sie dem dying ReLU Problem entgegen, bei dem Neuronen "sterben", dadurch, dass sie nicht mehr aktiviert werden. Laut Alec Radford et al. ist diese Funktion mit einer Steigung von 0.2 der "normalen" ReLU Funktion im Diskriminator des DCGANs vorzuziehen. Sigmoid wird verwendet, um im Output-Layer die Ergebnisse auf eine Range von 0 bis 1 zu begrenzen. Diese Range kann als Wahrscheinlichkeit dafür, ob das Bild echt oder fake ist, interpretiert werden. Wobei 1 bedeutet, dass es echt ist und 0 bedeutet, dass es fake ist.
  • Batch Normalization nach den Convolution Layern und dem Dense Layer (jedoch nicht nach dem Input Layer) --> Batch Normalization wird verwendet, um die Ergebnisse zwischen den Layern zu skalieren. Durch die Skalierung auf eine Normalverteilung wird die Convergence Geschwindigkeit erhöht (Die Zeit die es benötigt bis ein Modell fertig gelernt hat und sich das Ergebnis der Kostenfunktion nicht mehr verbessern kann) und die Werte unterschiedlicher Merkmale können verglichen werden, da sie nun einheitlich skaliert wurden.
  • Weight intitialization mit Standardabweichung 0.02 anstatt 0.01 --> Die Gewichte der einzelnen Convolutional Layer werden in tensorflow.keras standardmäßig initiiert mit einem Mittelwert von 0 und einer Standardabweichung von 0.01. Im oben genannten Paper wird empfohlen die Standardabweichung auf 0.02 zu erhöhen.

Zusätzlich implementierte Ansätze:

In [75]:
# The kernel initializer defines how the weights in a neural network layer should be initialized. This has a direct effect on convergence speed. A recommended Distribution for training DCGANs is the following:
discriminator_kernel_initializer = RandomNormal(stddev=0.02)

def create_discriminator():
    model = Sequential()

    # RGB image with a width of 64 and a height of 64
    model.add(InputLayer(input_shape=(64, 64, 3)))

    # The output of the first convolutional layer is 128 feature maps with a width of 32 and a height of 32 due to stride set to 2 and padding set to 'same'.
    model.add(Conv2D(filters=128, kernel_size=(5,5), kernel_initializer=discriminator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(rate=0.3))

    # The second one produces 256 feature maps which are 16x16.
    model.add(Conv2D(filters=256, kernel_size=(5,5), kernel_initializer=discriminator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(rate=0.3))

    # The third one produces 512 with a shape of (8, 8).
    model.add(Conv2D(filters=512, kernel_size=(5,5), kernel_initializer=discriminator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(rate=0.3))

    # The last convolutional layer has an output of (4, 4, 1024).
    model.add(Conv2D(filters=1024, kernel_size=(5,5), kernel_initializer=discriminator_kernel_initializer, strides=(2, 2), padding='same', use_bias=False))
    model.add(BatchNormalization())
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dropout(rate=0.3))

    # Matrices have to be flattened to a vector to be able to add the output layer which is fully connected.
    model.add(Flatten())

    model.add(Dense(units=1, kernel_initializer=discriminator_kernel_initializer, use_bias=False))
    model.add(BatchNormalization())
    # Sigmoid function is used to scale the output to a range of 0 to 1 which is the probability of an image being fake or real.
    model.add(Activation(activation='sigmoid'))

    return model
In [76]:
discriminator = create_discriminator()

print('The topography of the discriminator\'s model:\n')
discriminator.summary()
The topography of the discriminator's model:

Model: "sequential_7"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_12 (Conv2D)           (None, 32, 32, 64)        4800      
_________________________________________________________________
batch_normalization_31 (Batc (None, 32, 32, 64)        256       
_________________________________________________________________
leaky_re_lu_12 (LeakyReLU)   (None, 32, 32, 64)        0         
_________________________________________________________________
dropout_12 (Dropout)         (None, 32, 32, 64)        0         
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 16, 16, 128)       204800    
_________________________________________________________________
batch_normalization_32 (Batc (None, 16, 16, 128)       512       
_________________________________________________________________
leaky_re_lu_13 (LeakyReLU)   (None, 16, 16, 128)       0         
_________________________________________________________________
dropout_13 (Dropout)         (None, 16, 16, 128)       0         
_________________________________________________________________
conv2d_14 (Conv2D)           (None, 8, 8, 256)         819200    
_________________________________________________________________
batch_normalization_33 (Batc (None, 8, 8, 256)         1024      
_________________________________________________________________
leaky_re_lu_14 (LeakyReLU)   (None, 8, 8, 256)         0         
_________________________________________________________________
dropout_14 (Dropout)         (None, 8, 8, 256)         0         
_________________________________________________________________
conv2d_15 (Conv2D)           (None, 4, 4, 512)         3276800   
_________________________________________________________________
batch_normalization_34 (Batc (None, 4, 4, 512)         2048      
_________________________________________________________________
leaky_re_lu_15 (LeakyReLU)   (None, 4, 4, 512)         0         
_________________________________________________________________
dropout_15 (Dropout)         (None, 4, 4, 512)         0         
_________________________________________________________________
flatten_3 (Flatten)          (None, 8192)              0         
_________________________________________________________________
dense_7 (Dense)              (None, 1)                 8192      
_________________________________________________________________
batch_normalization_35 (Batc (None, 1)                 4         
_________________________________________________________________
activation_7 (Activation)    (None, 1)                 0         
=================================================================
Total params: 4,317,636
Trainable params: 4,315,714
Non-trainable params: 1,922
_________________________________________________________________

2.2.8. Definition der Fehlerfunktionen

Die Fehlerfunktionen werden verwendet, um die Qualität der Netze zu messen. Auf Basis der Fehlerfunktionen können die Gewichtsanpassungen der Netze durchgeführt werden.

Die verwendete Fehlerfunktion ist die Binäre Kreuzentropie.

Die Fehlerfunktion des Diskriminators ist die Summe aus dem Wert der Fehlerfunktion auf den echten Daten und dem Wert der Fehlerfunktion auf den generierten Daten. Der Diskriminator wird im Laufe des Trainings versuchen diese Summe zu minimieren. Die Fehlerfunktion des Generators ist die Fehlerfunktion des Diskriminators, angewandt auf den generierten Bildern, abgezogen von 1. Der Generator versucht diese Differenz ebenso zu minimieren. Dadurch wird gewährleistet, dass der Generator einen geringen Fehler Wert hat, wenn der Diskriminator die generierten Bilder als "echt" klassifiert (i.e. echt = 1).

Ein typisches Problem beim Trainieren ist, dass der Diskriminator wesentlich schneller lernt, als der Generator. Dadurch entsteht das Problem, dass der Generator nicht mehr hilfreiches Feedback durch das Ergebnis der Fehlerfunktion bekommt, da dies durch den sehr guten Diskriminator immer maximal ist, auch wenn der Generator eventuell gerade ein gutes Feature gelernt hat. Um dies zu verhindern wird empfohlen Label Smoothing und Label Flipping anzuwenden (siehe https://github.com/soumith/ganhacks). Label Smoothing bewirkt, dass die Labels nicht mehr statische Werte (entweder 0 oder 1 haben), sondern eine Range von bspw. 0 bis 0.3 und 0.7 bis 1 respektive haben. Label Flipping fügt den Labels Noise hinzu. Genauer gesagt werden p-Prozent der Labels umgedreht (aus 0 wird 1, aus 1 wird 0). Im Folgenden werden diese Fehlerfunktionen definiert und auf Seiten des Diskriminators Label Smoothing und Label Flipping angewandt.

In [77]:
# Binary crossentropy is used for binary classification problems (i.e. real vs. fake).
binary_crossentropy = BinaryCrossentropy()
In [78]:
# The loss of the discriminator consists of the sum of the loss of the real image vs. its prediction and the loss of the fake image vs. its prediction.
def calc_discriminator_loss(real_output, fake_output):
    y_true_positive = np.ones_like(real_output).flatten()
    # Noise is added to the true values to prevent overfitting
    y_true_positive = flip_labels(y_true_positive, 0.05)
    # Labels are smoothed out to prevent overfitting
    y_true_positive = smooth_out_labels(y_true_positive, 0.3)
    y_true_positive = np.reshape(y_true_positive, (-1, 1))

    y_true_negative = np.zeros_like(fake_output).flatten()
    # Noise is added to the true values to prevent overfitting
    y_true_negative = flip_labels(y_true_negative, 0.05)
    # Labels are smoothed out to prevent overfitting
    y_true_negative = smooth_out_labels(y_true_negative, 0.3)
    y_true_negative = np.reshape(y_true_negative, (-1, 1))

    real_loss = binary_crossentropy(y_true=y_true_positive, y_pred=real_output)
    fake_loss = binary_crossentropy(y_true=y_true_negative, y_pred=fake_output)

    return real_loss, fake_loss
In [79]:
# If the generator does a good job the discriminator will classify the image as real  (i.e. as 1). Therefore for generator loss y_true is 1.
def calc_generator_loss(fake_output):
    return binary_crossentropy(y_true=tf.ones_like(fake_output), y_pred=fake_output)
In [80]:
# This function makes the true values of the discriminator (i.e. 0 or 1) dynamic (Randomly between 0 and smoothness_range or smoothness_range and 1). This is really useful to ensure that the discriminator is not overconfident with its predictions.
def smooth_out_labels(labels, smoothness_range):
    for i, label in enumerate(labels):
        if label == 0:
            labels[i] = np.random.random() * smoothness_range
        elif label == 1:
            labels[i] = 1 - np.random.random() * smoothness_range
    return labels
In [81]:
# With probability flip_probability noise is added to the true values. This is really useful to ensure that the discriminator is not overconfident with its predictions.
def flip_labels(labels, flip_probability):
    for i, label in enumerate(labels):
        if flip_probability > np.random.random():
            labels[i] = 0 if label == 1 else 1
    return labels

2.2.9. Definition der Optimierer

Die Optimierer werden verwendet, um die Gewichtanpassungen abängig von den Ergebnissen der Fehlerfunktionen jede Iteration umzusetzen.

Als Optimierer wird in beiden Fällen der Adam Optimierer verwendet. Empfohlen wird hierbei für beide Netze eine Lernrate von 0.0002 und Momentum von 0.5. In unserem Fall zeigt sich jedoch, dass eine Verringerung der Lernrate des Diskriminators einen positiven Effekt auf das Training hat, da so der Diskriminator weiter verlangsamt wird und sich der Generator besser anpassen kann.

In [82]:
# Adam optimizer with a momentum of 0.5 and a learning rate of 0.0002 is recommended for the training of DCGANs.
generator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5)
discriminator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001, beta_1=0.5)

2.2.10. Definition der Trainingsfunktion

Im Folgenden werden alle zuvor definierten Funktionen nacheinander aufgerufen. Dies wird in einer Schleife so lange gemacht bis das Training zu Ende ist. Das Ende des Trainings wird dabei durch den Hyperparameter end_epoch (sieht weiter unten) festgelegt. Ein Epoch besteht dabei aus i Iterationen. Die Anzahl der Iterationen innerhalb eines Epochs wird wiederum durch die definierte batch size b und die Anzahl aller Trainingsbilder n festgelegt (i=n/b). Die Anzahl der Trainingsbilder ist 4881 und die batch size wurde oben mit einem Wert von 128 defininert, wodurch die Ierationen pro Epoch 39 sind.

Der Ablauf einer Iteration ist nun:

  1. Einen zufälligen Noise-Vektor erstellen
  2. Mit Hilfe des Noise-Vektor über den Generator ein Bild erstellen
  3. Den Diskriminator verwenden, um ein echtes Bild und das generierte Bild zu klassifizieren
  4. Die Fehlerfunktionen für beide Netze aufgerufen
  5. Mit Hilfe der Fehlerwerte die Gewichte der beiden Netze anpassen
  6. Die aktuelle Performance der Netze protokollieren, um den Verlauf später visualisieren zu können
  7. Vorherige Schritte wiederholen, bis der letzte Epoch durchlaufen wurde
In [83]:
def train_iteration(images_batch):
    noise = tf.random.normal(shape=[BATCH_SIZE, NOISE_DIMENSIONS])

    with tf.GradientTape() as generator_tape, tf.GradientTape() as discriminator_tape:
        generated_images_batch = generator(noise, training=True)

        real_output = discriminator(images_batch)
        fake_output = discriminator(generated_images_batch)

        generator_loss = calc_generator_loss(fake_output)
        discriminator_real_loss, discriminator_fake_loss = calc_discriminator_loss(real_output, fake_output)
        discriminator_total_loss = discriminator_real_loss + discriminator_fake_loss

    discriminator_gradients = discriminator_tape.gradient(target=discriminator_total_loss, sources=discriminator.trainable_variables)
    discriminator_optimizer.apply_gradients(zip(discriminator_gradients, discriminator.trainable_variables))

    generator_gradients = generator_tape.gradient(target=generator_loss, sources=generator.trainable_variables)
    generator_optimizer.apply_gradients(zip(generator_gradients, generator.trainable_variables))

    return real_output, fake_output, discriminator_real_loss, discriminator_fake_loss, discriminator_total_loss, generator_loss
In [84]:
def train(image_dataset, epochs, generated_images_dir_url: str, generated_figures_dir_url: str):
    training_start = time.time()
    print('\nTRAINING STARTED')

    # Lists with all the metrics.
    generator_losses = []
    discriminator_real_losses = []
    discriminator_fake_losses = []
    discriminator_total_losses = []
    discriminator_real_accuracies = []
    discriminator_fake_accuracies = []
    discriminator_total_accuracies = []

    for epoch in epochs:
        epoch_start = time.time()

        for i, image_batch in enumerate(image_dataset):
            real_output, fake_output, discriminator_real_loss, discriminator_fake_loss, discriminator_total_loss, generator_loss = train_iteration(image_batch)

            # At each epochs' last iteration the current metrics should be saved for future analysis
            if i == len(image_dataset) - 1:
                generator_losses.append(generator_loss)
                discriminator_real_losses.append(discriminator_real_loss)
                discriminator_fake_losses.append(discriminator_fake_loss)
                discriminator_total_losses.append(discriminator_total_loss)

                y_true_positive = np.ones_like(real_output)
                y_true_negative = np.zeros_like(fake_output)
                binary_accuracy = BinaryAccuracy()
                binary_accuracy.update_state(y_true_positive, real_output)
                discriminator_real_accuracy = binary_accuracy.result().numpy()
                binary_accuracy.reset_states()
                binary_accuracy.update_state(y_true_negative, fake_output)
                discriminator_fake_accuracy = binary_accuracy.result().numpy()
                binary_accuracy.reset_states()
                binary_accuracy.update_state(np.vstack((y_true_positive, y_true_negative)), np.vstack((real_output, fake_output)))
                discriminator_total_accuracy = binary_accuracy.result().numpy()
                binary_accuracy.reset_states()
                discriminator_real_accuracies.append(discriminator_real_accuracy)
                discriminator_fake_accuracies.append(discriminator_fake_accuracy)
                discriminator_total_accuracies.append(discriminator_total_accuracy)

        ImageController.generate_and_save_images(generator, seed, os.path.join(generated_images_dir_url, f'images-at-epoch-{epoch}'))
        SaveController.save_checkpoint_weights(epoch, generator, discriminator, generator_checkpoints_dir_url, discriminator_checkpoints_dir_url, generator_losses[-1], discriminator_total_losses[-1])

        epoch_end = time.time()

        print(f'\nTime for epoch {epoch}: {epoch_end - epoch_start} sec')
        print(f'Generator loss: {generator_losses[-1]}; Discriminator real loss: {discriminator_real_losses[-1]}; Discriminator fake loss: {discriminator_fake_losses[-1]}; Discriminator total loss: {discriminator_total_losses[-1]};')
        print(f'Discriminator real accuracy: {discriminator_real_accuracies[-1]}; Discriminator fake accuracy: {discriminator_fake_accuracies[-1]}; Discriminator total accuracy: {discriminator_total_accuracies[-1]}')

    training_end = time.time()

    print(f'\nTotal time: {(training_end - training_start)/60} min\n')
    print('TRAINING COMPLETED')

    Evaluator.plot_and_save_losses(generator_losses, discriminator_real_losses, discriminator_fake_losses, discriminator_total_losses, epochs, generated_figures_dir_url)
    Evaluator.plot_and_save_discriminator_accuracies(discriminator_real_accuracies, discriminator_fake_accuracies, discriminator_total_accuracies, epochs, generated_figures_dir_url)

2.2.11. Konstanten

Nachfolgende Konstanten werden verwendet, um URLs zu definieren und zu steuern, wie das Training ablaufen soll.

In [85]:
end_epoch = 500

# URLs
generator_checkpoints_dir_url = os.path.join('assets', 'checkpoints', 'generator')
discriminator_checkpoints_dir_url = os.path.join('assets', 'checkpoints', 'discriminator')
# Directory which stores all generated media in its subdirectories (i.e. the generated Pokémon from the seed, the gif which shows the progress throughout all epochs and the evaluation figures constructed at the end of the training)
generated_media_dir_url = os.path.join('assets', 'generated-media')
# Output URL for the generator once training is over and should_save_generator is set to True
trained_generator_model_dir_url = '../public'

# Controls whether previously saved checkpoint files should be used or not
should_use_checkpoint_files = False
# Controls whether the generator model should be saved at the end of the training at the specified path for future predictions
should_save_generator = True

2.2.12. Training

Aufrufen der Trainingsfunktion in Abhängigkeit zu den definierten Konstanten.

In [86]:
# Depending on the values of the hyperparameters and possibly training done before different initial values are set.
do_checkpoint_files_exist = SaveController.do_checkpoint_files_exist(generator_checkpoints_dir_url, discriminator_checkpoints_dir_url)

if do_checkpoint_files_exist:
    print('Found previously saved checkpoint files')
    if should_use_checkpoint_files:
        print(f'Will be using previous checkpoint files because should_use_checkpoint_files is set to: {should_use_checkpoint_files}')
        last_created_generated_media_subdir_url = SaveController.get_last_created_file_or_subdirectory_url(generated_media_dir_url)
        generated_images_dir_url = os.path.join(last_created_generated_media_subdir_url, 'images')
        generated_gifs_dir_url = os.path.join(last_created_generated_media_subdir_url, 'gifs')
        generated_figures_dir_url = os.path.join(last_created_generated_media_subdir_url, 'figures')
        last_completed_epoch = SaveController.load_latest_checkpoint_files(generator, discriminator, generator_checkpoints_dir_url, discriminator_checkpoints_dir_url)
        start_epoch = last_completed_epoch + 1
    else:
        print(f'Will not be using previous checkpoint files because should_use_checkpoint_files is set to: {should_use_checkpoint_files}')
        SaveController.delete_checkpoint_files(generator_checkpoints_dir_url, discriminator_checkpoints_dir_url)
        print('Previous checkpoint files have been deleted')

        generated_images_dir_url, generated_gifs_dir_url, generated_figures_dir_url = SaveController.get_new_generated_media_subdir_urls(generated_media_dir_url)
        SaveController.create_generated_media_dirs(generated_images_dir_url, generated_gifs_dir_url, generated_figures_dir_url)
        start_epoch = 1
else:
    print('Did not find any previously saved checkpoint files')
    generated_images_dir_url, generated_gifs_dir_url, generated_figures_dir_url = SaveController.get_new_generated_media_subdir_urls(generated_media_dir_url)
    SaveController.create_generated_media_dirs(generated_images_dir_url, generated_gifs_dir_url, generated_figures_dir_url)
    SaveController.create_checkpoint_dirs(generator_checkpoints_dir_url, discriminator_checkpoints_dir_url)
    start_epoch = 1


print(f'Starting training from epoch {start_epoch}. Remaining epochs: {end_epoch - start_epoch + 1}')
train(train_dataset, range(start_epoch, end_epoch + 1), generated_images_dir_url, generated_figures_dir_url)
Found previously saved checkpoint files
Will not be using previous checkpoint files because should_use_checkpoint_files is set to: False
Previous checkpoint files have been deleted
Starting training from epoch 1. Remaining epochs: 500

TRAINING STARTED

Time for epoch 1: 13.287036418914795 sec
Generator loss: 0.72438645362854; Discriminator real loss: 0.5123422145843506; Discriminator fake loss: 0.6739431023597717; Discriminator total loss: 1.1862852573394775;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 2: 13.224436521530151 sec
Generator loss: 0.5990038514137268; Discriminator real loss: 0.5074782371520996; Discriminator fake loss: 0.7631974220275879; Discriminator total loss: 1.2706756591796875;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.0; Discriminator total accuracy: 0.484375

Time for epoch 3: 13.240208148956299 sec
Generator loss: 0.9677495956420898; Discriminator real loss: 0.5217401385307312; Discriminator fake loss: 0.5665706396102905; Discriminator total loss: 1.088310718536377;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.96484375

Time for epoch 4: 13.376213550567627 sec
Generator loss: 0.6680272817611694; Discriminator real loss: 0.7036533355712891; Discriminator fake loss: 0.7276493310928345; Discriminator total loss: 1.4313026666641235;
Discriminator real accuracy: 0.78125; Discriminator fake accuracy: 0.3828125; Discriminator total accuracy: 0.58203125

Time for epoch 5: 13.270617961883545 sec
Generator loss: 0.9337856769561768; Discriminator real loss: 0.5947467684745789; Discriminator fake loss: 0.6020045280456543; Discriminator total loss: 1.196751356124878;
Discriminator real accuracy: 0.78125; Discriminator fake accuracy: 0.859375; Discriminator total accuracy: 0.8203125

Time for epoch 6: 13.261143684387207 sec
Generator loss: 0.7736753821372986; Discriminator real loss: 0.6877704858779907; Discriminator fake loss: 0.6638777256011963; Discriminator total loss: 1.351648211479187;
Discriminator real accuracy: 0.5703125; Discriminator fake accuracy: 0.640625; Discriminator total accuracy: 0.60546875

Time for epoch 7: 13.290632009506226 sec
Generator loss: 0.888750433921814; Discriminator real loss: 0.68594890832901; Discriminator fake loss: 0.6049405336380005; Discriminator total loss: 1.2908895015716553;
Discriminator real accuracy: 0.578125; Discriminator fake accuracy: 0.8671875; Discriminator total accuracy: 0.72265625

Time for epoch 8: 13.275870084762573 sec
Generator loss: 0.8693264722824097; Discriminator real loss: 0.6096484661102295; Discriminator fake loss: 0.6368932127952576; Discriminator total loss: 1.2465417385101318;
Discriminator real accuracy: 0.8125; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.83203125

Time for epoch 9: 13.266822576522827 sec
Generator loss: 0.9099664092063904; Discriminator real loss: 0.6679403781890869; Discriminator fake loss: 0.6223353147506714; Discriminator total loss: 1.2902756929397583;
Discriminator real accuracy: 0.6875; Discriminator fake accuracy: 0.8359375; Discriminator total accuracy: 0.76171875

Time for epoch 10: 13.296725273132324 sec
Generator loss: 0.740410327911377; Discriminator real loss: 0.6733658313751221; Discriminator fake loss: 0.6931347846984863; Discriminator total loss: 1.3665006160736084;
Discriminator real accuracy: 0.640625; Discriminator fake accuracy: 0.609375; Discriminator total accuracy: 0.625

Time for epoch 11: 13.314854860305786 sec
Generator loss: 0.6954630613327026; Discriminator real loss: 0.6070619821548462; Discriminator fake loss: 0.7071980237960815; Discriminator total loss: 1.3142600059509277;
Discriminator real accuracy: 0.71875; Discriminator fake accuracy: 0.4609375; Discriminator total accuracy: 0.58984375

Time for epoch 12: 13.271944999694824 sec
Generator loss: 0.9387962222099304; Discriminator real loss: 0.6799929141998291; Discriminator fake loss: 0.5995069146156311; Discriminator total loss: 1.2794997692108154;
Discriminator real accuracy: 0.6015625; Discriminator fake accuracy: 0.9296875; Discriminator total accuracy: 0.765625

Time for epoch 13: 13.295193910598755 sec
Generator loss: 0.9578759074211121; Discriminator real loss: 0.6204061508178711; Discriminator fake loss: 0.5950649976730347; Discriminator total loss: 1.2154711484909058;
Discriminator real accuracy: 0.75; Discriminator fake accuracy: 0.9375; Discriminator total accuracy: 0.84375

Time for epoch 14: 13.288065195083618 sec
Generator loss: 0.6632567048072815; Discriminator real loss: 0.5619409084320068; Discriminator fake loss: 0.7289152145385742; Discriminator total loss: 1.290856122970581;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 0.375; Discriminator total accuracy: 0.66796875

Time for epoch 15: 13.288493156433105 sec
Generator loss: 0.7694200873374939; Discriminator real loss: 0.6951377987861633; Discriminator fake loss: 0.6626409292221069; Discriminator total loss: 1.357778787612915;
Discriminator real accuracy: 0.5546875; Discriminator fake accuracy: 0.6640625; Discriminator total accuracy: 0.609375

Time for epoch 16: 13.304238080978394 sec
Generator loss: 0.7722600102424622; Discriminator real loss: 0.6322523355484009; Discriminator fake loss: 0.6588695049285889; Discriminator total loss: 1.2911218404769897;
Discriminator real accuracy: 0.7734375; Discriminator fake accuracy: 0.7265625; Discriminator total accuracy: 0.75

Time for epoch 17: 13.288197994232178 sec
Generator loss: 0.6959681510925293; Discriminator real loss: 0.5948910713195801; Discriminator fake loss: 0.7089318037033081; Discriminator total loss: 1.3038228750228882;
Discriminator real accuracy: 0.8046875; Discriminator fake accuracy: 0.46875; Discriminator total accuracy: 0.63671875

Time for epoch 18: 13.303990840911865 sec
Generator loss: 0.9218342304229736; Discriminator real loss: 0.5785410404205322; Discriminator fake loss: 0.6091128587722778; Discriminator total loss: 1.18765389919281;
Discriminator real accuracy: 0.875; Discriminator fake accuracy: 0.78125; Discriminator total accuracy: 0.828125

Time for epoch 19: 13.30395221710205 sec
Generator loss: 1.0798895359039307; Discriminator real loss: 0.580531895160675; Discriminator fake loss: 0.5459112524986267; Discriminator total loss: 1.1264431476593018;
Discriminator real accuracy: 0.8515625; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.90625

Time for epoch 20: 13.294887065887451 sec
Generator loss: 1.0239810943603516; Discriminator real loss: 0.5833492279052734; Discriminator fake loss: 0.5702255964279175; Discriminator total loss: 1.153574824333191;
Discriminator real accuracy: 0.8359375; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.8984375

Time for epoch 21: 13.297459125518799 sec
Generator loss: 0.9999884366989136; Discriminator real loss: 0.5604941844940186; Discriminator fake loss: 0.5844084024429321; Discriminator total loss: 1.1449025869369507;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.875; Discriminator total accuracy: 0.90625

Time for epoch 22: 13.349308013916016 sec
Generator loss: 0.621751606464386; Discriminator real loss: 0.5684739351272583; Discriminator fake loss: 0.7658994793891907; Discriminator total loss: 1.3343734741210938;
Discriminator real accuracy: 0.859375; Discriminator fake accuracy: 0.34375; Discriminator total accuracy: 0.6015625

Time for epoch 23: 13.344076156616211 sec
Generator loss: 0.8749783039093018; Discriminator real loss: 0.5331199169158936; Discriminator fake loss: 0.6266665458679199; Discriminator total loss: 1.1597864627838135;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 0.859375; Discriminator total accuracy: 0.89453125

Time for epoch 24: 13.348669052124023 sec
Generator loss: 0.8429793119430542; Discriminator real loss: 0.6837366223335266; Discriminator fake loss: 0.6505488157272339; Discriminator total loss: 1.3342854976654053;
Discriminator real accuracy: 0.7109375; Discriminator fake accuracy: 0.7109375; Discriminator total accuracy: 0.7109375

Time for epoch 25: 13.724629163742065 sec
Generator loss: 0.6624544262886047; Discriminator real loss: 0.5941808223724365; Discriminator fake loss: 0.7638351917266846; Discriminator total loss: 1.358016014099121;
Discriminator real accuracy: 0.7734375; Discriminator fake accuracy: 0.421875; Discriminator total accuracy: 0.59765625

Time for epoch 26: 14.925580501556396 sec
Generator loss: 0.8209097981452942; Discriminator real loss: 0.7145728468894958; Discriminator fake loss: 0.6416170597076416; Discriminator total loss: 1.3561899662017822;
Discriminator real accuracy: 0.5390625; Discriminator fake accuracy: 0.8046875; Discriminator total accuracy: 0.671875

Time for epoch 27: 14.33730173110962 sec
Generator loss: 0.9010246992111206; Discriminator real loss: 0.5945581197738647; Discriminator fake loss: 0.6267651915550232; Discriminator total loss: 1.2213232517242432;
Discriminator real accuracy: 0.7890625; Discriminator fake accuracy: 0.828125; Discriminator total accuracy: 0.80859375

Time for epoch 28: 13.816447496414185 sec
Generator loss: 1.259983777999878; Discriminator real loss: 0.705308198928833; Discriminator fake loss: 0.5368437170982361; Discriminator total loss: 1.2421519756317139;
Discriminator real accuracy: 0.59375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.78515625

Time for epoch 29: 14.845512628555298 sec
Generator loss: 0.9628007411956787; Discriminator real loss: 0.6181085705757141; Discriminator fake loss: 0.5719953775405884; Discriminator total loss: 1.1901040077209473;
Discriminator real accuracy: 0.796875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.89453125

Time for epoch 30: 14.334022760391235 sec
Generator loss: 0.8133426904678345; Discriminator real loss: 0.6040472984313965; Discriminator fake loss: 0.7294267416000366; Discriminator total loss: 1.333474040031433;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.515625; Discriminator total accuracy: 0.69921875

Time for epoch 31: 20.876286268234253 sec
Generator loss: 0.9421387910842896; Discriminator real loss: 0.6365906000137329; Discriminator fake loss: 0.5795587301254272; Discriminator total loss: 1.2161493301391602;
Discriminator real accuracy: 0.703125; Discriminator fake accuracy: 0.9296875; Discriminator total accuracy: 0.81640625

Time for epoch 32: 14.09741735458374 sec
Generator loss: 0.9007139205932617; Discriminator real loss: 0.5884118676185608; Discriminator fake loss: 0.6061201095581055; Discriminator total loss: 1.1945319175720215;
Discriminator real accuracy: 0.8515625; Discriminator fake accuracy: 0.9140625; Discriminator total accuracy: 0.8828125

Time for epoch 33: 13.332488298416138 sec
Generator loss: 0.7815492153167725; Discriminator real loss: 0.5580379962921143; Discriminator fake loss: 0.6606815457344055; Discriminator total loss: 1.218719482421875;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.6640625; Discriminator total accuracy: 0.7734375

Time for epoch 34: 13.312888622283936 sec
Generator loss: 0.522530198097229; Discriminator real loss: 0.5078411102294922; Discriminator fake loss: 0.8618802428245544; Discriminator total loss: 1.3697214126586914;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.1171875; Discriminator total accuracy: 0.546875

Time for epoch 35: 13.332719087600708 sec
Generator loss: 0.9874580502510071; Discriminator real loss: 0.7420432567596436; Discriminator fake loss: 0.5946774482727051; Discriminator total loss: 1.3367207050323486;
Discriminator real accuracy: 0.46875; Discriminator fake accuracy: 0.921875; Discriminator total accuracy: 0.6953125

Time for epoch 36: 13.395556926727295 sec
Generator loss: 1.1403785943984985; Discriminator real loss: 0.7947220802307129; Discriminator fake loss: 0.553415060043335; Discriminator total loss: 1.3481371402740479;
Discriminator real accuracy: 0.3125; Discriminator fake accuracy: 0.9375; Discriminator total accuracy: 0.625

Time for epoch 37: 13.906950950622559 sec
Generator loss: 0.9604324102401733; Discriminator real loss: 0.7143077850341797; Discriminator fake loss: 0.5746474862098694; Discriminator total loss: 1.2889552116394043;
Discriminator real accuracy: 0.4375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.70703125

Time for epoch 38: 14.207334995269775 sec
Generator loss: 1.2320232391357422; Discriminator real loss: 0.694336473941803; Discriminator fake loss: 0.5172563791275024; Discriminator total loss: 1.2115929126739502;
Discriminator real accuracy: 0.546875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.7734375

Time for epoch 39: 13.985424995422363 sec
Generator loss: 2.6597445011138916; Discriminator real loss: 1.9364221096038818; Discriminator fake loss: 0.5394337177276611; Discriminator total loss: 2.475855827331543;
Discriminator real accuracy: 0.0078125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.50390625

Time for epoch 40: 13.747161149978638 sec
Generator loss: 0.7963380813598633; Discriminator real loss: 0.5786017179489136; Discriminator fake loss: 0.6513745784759521; Discriminator total loss: 1.2299762964248657;
Discriminator real accuracy: 0.859375; Discriminator fake accuracy: 0.6953125; Discriminator total accuracy: 0.77734375

Time for epoch 41: 14.191729068756104 sec
Generator loss: 1.0234143733978271; Discriminator real loss: 0.6108036041259766; Discriminator fake loss: 0.5543115139007568; Discriminator total loss: 1.1651151180267334;
Discriminator real accuracy: 0.734375; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.859375

Time for epoch 42: 13.782112836837769 sec
Generator loss: 0.6634138822555542; Discriminator real loss: 0.5330373048782349; Discriminator fake loss: 0.7425685524940491; Discriminator total loss: 1.2756059169769287;
Discriminator real accuracy: 0.8671875; Discriminator fake accuracy: 0.421875; Discriminator total accuracy: 0.64453125

Time for epoch 43: 13.787698984146118 sec
Generator loss: 0.9703446626663208; Discriminator real loss: 0.6337708234786987; Discriminator fake loss: 0.5829641819000244; Discriminator total loss: 1.2167350053787231;
Discriminator real accuracy: 0.765625; Discriminator fake accuracy: 0.9296875; Discriminator total accuracy: 0.84765625

Time for epoch 44: 13.769601821899414 sec
Generator loss: 0.765005886554718; Discriminator real loss: 0.5708723068237305; Discriminator fake loss: 0.6808544397354126; Discriminator total loss: 1.251726746559143;
Discriminator real accuracy: 0.9140625; Discriminator fake accuracy: 0.71875; Discriminator total accuracy: 0.81640625

Time for epoch 45: 13.91265058517456 sec
Generator loss: 0.8294133543968201; Discriminator real loss: 0.6086299419403076; Discriminator fake loss: 0.6198043823242188; Discriminator total loss: 1.2284343242645264;
Discriminator real accuracy: 0.828125; Discriminator fake accuracy: 0.90625; Discriminator total accuracy: 0.8671875

Time for epoch 46: 13.836909532546997 sec
Generator loss: 0.8512098789215088; Discriminator real loss: 0.561216413974762; Discriminator fake loss: 0.6469562649726868; Discriminator total loss: 1.2081726789474487;
Discriminator real accuracy: 0.890625; Discriminator fake accuracy: 0.8046875; Discriminator total accuracy: 0.84765625

Time for epoch 47: 13.41451907157898 sec
Generator loss: 1.1905131340026855; Discriminator real loss: 0.6459230780601501; Discriminator fake loss: 0.5477152466773987; Discriminator total loss: 1.1936383247375488;
Discriminator real accuracy: 0.6171875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.80859375

Time for epoch 48: 14.71840214729309 sec
Generator loss: 0.8896724581718445; Discriminator real loss: 0.5397493243217468; Discriminator fake loss: 0.6089648008346558; Discriminator total loss: 1.1487140655517578;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 0.859375; Discriminator total accuracy: 0.90234375

Time for epoch 49: 13.82140827178955 sec
Generator loss: 0.8881258964538574; Discriminator real loss: 0.5335757732391357; Discriminator fake loss: 0.6108956336975098; Discriminator total loss: 1.1444714069366455;
Discriminator real accuracy: 0.890625; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.87109375

Time for epoch 50: 13.818151950836182 sec
Generator loss: 0.7502084374427795; Discriminator real loss: 0.5196460485458374; Discriminator fake loss: 0.6713603734970093; Discriminator total loss: 1.1910064220428467;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.6875; Discriminator total accuracy: 0.83984375

Time for epoch 51: 13.739842653274536 sec
Generator loss: 1.0315849781036377; Discriminator real loss: 0.5942964553833008; Discriminator fake loss: 0.5638261437416077; Discriminator total loss: 1.1581225395202637;
Discriminator real accuracy: 0.859375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.92578125

Time for epoch 52: 13.780126094818115 sec
Generator loss: 1.260739803314209; Discriminator real loss: 0.7817337512969971; Discriminator fake loss: 0.49081987142562866; Discriminator total loss: 1.2725536823272705;
Discriminator real accuracy: 0.2734375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.63671875

Time for epoch 53: 13.759336709976196 sec
Generator loss: 1.1145435571670532; Discriminator real loss: 0.6566327810287476; Discriminator fake loss: 0.5287937521934509; Discriminator total loss: 1.1854264736175537;
Discriminator real accuracy: 0.6484375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.8125

Time for epoch 54: 14.30982232093811 sec
Generator loss: 1.4567322731018066; Discriminator real loss: 0.7884427905082703; Discriminator fake loss: 0.4773296117782593; Discriminator total loss: 1.2657723426818848;
Discriminator real accuracy: 0.328125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.6640625

Time for epoch 55: 13.728715658187866 sec
Generator loss: 1.4981534481048584; Discriminator real loss: 0.8770128488540649; Discriminator fake loss: 0.47929704189300537; Discriminator total loss: 1.3563098907470703;
Discriminator real accuracy: 0.234375; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.609375

Time for epoch 56: 13.758542776107788 sec
Generator loss: 0.709549605846405; Discriminator real loss: 0.5865448713302612; Discriminator fake loss: 0.7052074670791626; Discriminator total loss: 1.2917523384094238;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.5234375; Discriminator total accuracy: 0.75

Time for epoch 57: 13.7906653881073 sec
Generator loss: 0.6925203204154968; Discriminator real loss: 0.493853896856308; Discriminator fake loss: 0.7047643661499023; Discriminator total loss: 1.1986182928085327;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.46875; Discriminator total accuracy: 0.72265625

Time for epoch 58: 13.766032695770264 sec
Generator loss: 1.1502602100372314; Discriminator real loss: 0.8006526827812195; Discriminator fake loss: 0.5510432720184326; Discriminator total loss: 1.3516960144042969;
Discriminator real accuracy: 0.375; Discriminator fake accuracy: 0.90625; Discriminator total accuracy: 0.640625

Time for epoch 59: 13.751373767852783 sec
Generator loss: 1.1260960102081299; Discriminator real loss: 0.6772603988647461; Discriminator fake loss: 0.5249819755554199; Discriminator total loss: 1.202242374420166;
Discriminator real accuracy: 0.59375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.79296875

Time for epoch 60: 13.760277509689331 sec
Generator loss: 0.8228798508644104; Discriminator real loss: 0.5915194153785706; Discriminator fake loss: 0.6521689295768738; Discriminator total loss: 1.2436883449554443;
Discriminator real accuracy: 0.7890625; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.8203125

Time for epoch 61: 13.783076524734497 sec
Generator loss: 0.8923144340515137; Discriminator real loss: 0.6228630542755127; Discriminator fake loss: 0.6099779009819031; Discriminator total loss: 1.2328410148620605;
Discriminator real accuracy: 0.8125; Discriminator fake accuracy: 0.921875; Discriminator total accuracy: 0.8671875

Time for epoch 62: 13.96304702758789 sec
Generator loss: 0.8707560300827026; Discriminator real loss: 0.5845962762832642; Discriminator fake loss: 0.6122775077819824; Discriminator total loss: 1.1968737840652466;
Discriminator real accuracy: 0.7890625; Discriminator fake accuracy: 0.78125; Discriminator total accuracy: 0.78515625

Time for epoch 63: 13.81363821029663 sec
Generator loss: 0.7468360066413879; Discriminator real loss: 0.4974548816680908; Discriminator fake loss: 0.6765336990356445; Discriminator total loss: 1.1739885807037354;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 0.625; Discriminator total accuracy: 0.78515625

Time for epoch 64: 13.779974460601807 sec
Generator loss: 0.8947799801826477; Discriminator real loss: 0.583008885383606; Discriminator fake loss: 0.6066709756851196; Discriminator total loss: 1.1896798610687256;
Discriminator real accuracy: 0.8984375; Discriminator fake accuracy: 0.953125; Discriminator total accuracy: 0.92578125

Time for epoch 65: 13.747693538665771 sec
Generator loss: 1.2010329961776733; Discriminator real loss: 0.734412431716919; Discriminator fake loss: 0.5461353659629822; Discriminator total loss: 1.280547857284546;
Discriminator real accuracy: 0.453125; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.69921875

Time for epoch 66: 13.777284860610962 sec
Generator loss: 0.8389721512794495; Discriminator real loss: 0.5600273609161377; Discriminator fake loss: 0.6326697468757629; Discriminator total loss: 1.1926970481872559;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.8203125; Discriminator total accuracy: 0.87890625

Time for epoch 67: 13.784786939620972 sec
Generator loss: 1.0063396692276; Discriminator real loss: 0.6099672317504883; Discriminator fake loss: 0.5652254819869995; Discriminator total loss: 1.1751927137374878;
Discriminator real accuracy: 0.7421875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.86328125

Time for epoch 68: 13.814839363098145 sec
Generator loss: 0.9329433441162109; Discriminator real loss: 0.5583015084266663; Discriminator fake loss: 0.5909804105758667; Discriminator total loss: 1.1492819786071777;
Discriminator real accuracy: 0.890625; Discriminator fake accuracy: 0.90625; Discriminator total accuracy: 0.8984375

Time for epoch 69: 13.808921575546265 sec
Generator loss: 1.5411516427993774; Discriminator real loss: 0.8061646223068237; Discriminator fake loss: 0.4620567560195923; Discriminator total loss: 1.268221378326416;
Discriminator real accuracy: 0.3203125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.66015625

Time for epoch 70: 14.45631217956543 sec
Generator loss: 0.9789109230041504; Discriminator real loss: 0.6241253614425659; Discriminator fake loss: 0.631371259689331; Discriminator total loss: 1.255496621131897;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.75; Discriminator total accuracy: 0.81640625

Time for epoch 71: 13.773176670074463 sec
Generator loss: 0.8344913721084595; Discriminator real loss: 0.5653448104858398; Discriminator fake loss: 0.6378936171531677; Discriminator total loss: 1.2032384872436523;
Discriminator real accuracy: 0.90625; Discriminator fake accuracy: 0.8046875; Discriminator total accuracy: 0.85546875

Time for epoch 72: 13.778824806213379 sec
Generator loss: 1.7688332796096802; Discriminator real loss: 1.099893569946289; Discriminator fake loss: 0.4895651340484619; Discriminator total loss: 1.589458703994751;
Discriminator real accuracy: 0.125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.5625

Time for epoch 73: 13.771288871765137 sec
Generator loss: 0.8406609892845154; Discriminator real loss: 0.5908708572387695; Discriminator fake loss: 0.6313703060150146; Discriminator total loss: 1.2222411632537842;
Discriminator real accuracy: 0.921875; Discriminator fake accuracy: 0.84375; Discriminator total accuracy: 0.8828125

Time for epoch 74: 13.793496131896973 sec
Generator loss: 1.021521806716919; Discriminator real loss: 0.5642914772033691; Discriminator fake loss: 0.5860382318496704; Discriminator total loss: 1.1503297090530396;
Discriminator real accuracy: 0.8515625; Discriminator fake accuracy: 0.9375; Discriminator total accuracy: 0.89453125

Time for epoch 75: 13.815562725067139 sec
Generator loss: 1.3382375240325928; Discriminator real loss: 0.7359361052513123; Discriminator fake loss: 0.5292442440986633; Discriminator total loss: 1.2651803493499756;
Discriminator real accuracy: 0.5234375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.76171875

Time for epoch 76: 13.826684713363647 sec
Generator loss: 1.145114779472351; Discriminator real loss: 0.62076735496521; Discriminator fake loss: 0.5154308676719666; Discriminator total loss: 1.1361982822418213;
Discriminator real accuracy: 0.7890625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.89453125

Time for epoch 77: 13.79772400856018 sec
Generator loss: 0.7186990976333618; Discriminator real loss: 0.5039750337600708; Discriminator fake loss: 0.7149573564529419; Discriminator total loss: 1.2189323902130127;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.5390625; Discriminator total accuracy: 0.7578125

Time for epoch 78: 13.82687759399414 sec
Generator loss: 1.0279085636138916; Discriminator real loss: 0.5943453907966614; Discriminator fake loss: 0.5529695749282837; Discriminator total loss: 1.1473150253295898;
Discriminator real accuracy: 0.828125; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.90625

Time for epoch 79: 14.156631231307983 sec
Generator loss: 0.9787227511405945; Discriminator real loss: 0.59937584400177; Discriminator fake loss: 0.586327075958252; Discriminator total loss: 1.185702919960022;
Discriminator real accuracy: 0.8984375; Discriminator fake accuracy: 0.8984375; Discriminator total accuracy: 0.8984375

Time for epoch 80: 13.8759605884552 sec
Generator loss: 0.6955482959747314; Discriminator real loss: 0.5367104411125183; Discriminator fake loss: 0.7209638357162476; Discriminator total loss: 1.257674217224121;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.4765625; Discriminator total accuracy: 0.73046875

Time for epoch 81: 14.228990077972412 sec
Generator loss: 1.2313425540924072; Discriminator real loss: 0.732284665107727; Discriminator fake loss: 0.5431455373764038; Discriminator total loss: 1.2754302024841309;
Discriminator real accuracy: 0.5234375; Discriminator fake accuracy: 0.90625; Discriminator total accuracy: 0.71484375

Time for epoch 82: 13.893384456634521 sec
Generator loss: 1.0017318725585938; Discriminator real loss: 0.5024361610412598; Discriminator fake loss: 0.5751874446868896; Discriminator total loss: 1.0776236057281494;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.9453125

Time for epoch 83: 13.702455043792725 sec
Generator loss: 0.8681606650352478; Discriminator real loss: 0.5841999650001526; Discriminator fake loss: 0.6140304803848267; Discriminator total loss: 1.198230504989624;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.890625; Discriminator total accuracy: 0.9296875

Time for epoch 84: 13.407918453216553 sec
Generator loss: 1.0702860355377197; Discriminator real loss: 0.5476374626159668; Discriminator fake loss: 0.5490024089813232; Discriminator total loss: 1.09663987159729;
Discriminator real accuracy: 0.8984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.94921875

Time for epoch 85: 13.546831369400024 sec
Generator loss: 1.0129797458648682; Discriminator real loss: 0.5777513980865479; Discriminator fake loss: 0.5654176473617554; Discriminator total loss: 1.1431690454483032;
Discriminator real accuracy: 0.828125; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.8984375

Time for epoch 86: 13.933221817016602 sec
Generator loss: 0.9728051424026489; Discriminator real loss: 0.5281997919082642; Discriminator fake loss: 0.5723682641983032; Discriminator total loss: 1.1005680561065674;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 0.9375; Discriminator total accuracy: 0.9453125

Time for epoch 87: 14.786840677261353 sec
Generator loss: 0.831196129322052; Discriminator real loss: 0.5313388109207153; Discriminator fake loss: 0.6530601382255554; Discriminator total loss: 1.184398889541626;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 0.6796875; Discriminator total accuracy: 0.81640625

Time for epoch 88: 14.20499587059021 sec
Generator loss: 1.0274080038070679; Discriminator real loss: 0.5983791947364807; Discriminator fake loss: 0.5649636387825012; Discriminator total loss: 1.163342833518982;
Discriminator real accuracy: 0.8125; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.90234375

Time for epoch 89: 13.624973058700562 sec
Generator loss: 1.3664703369140625; Discriminator real loss: 0.9506380558013916; Discriminator fake loss: 0.4878714084625244; Discriminator total loss: 1.438509464263916;
Discriminator real accuracy: 0.2109375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.59375

Time for epoch 90: 14.419193029403687 sec
Generator loss: 1.124519944190979; Discriminator real loss: 0.5695710182189941; Discriminator fake loss: 0.5459659099578857; Discriminator total loss: 1.1155369281768799;
Discriminator real accuracy: 0.8671875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.93359375

Time for epoch 91: 13.594706773757935 sec
Generator loss: 0.9238575100898743; Discriminator real loss: 0.5314847230911255; Discriminator fake loss: 0.6027798652648926; Discriminator total loss: 1.134264588356018;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 0.8984375; Discriminator total accuracy: 0.92578125

Time for epoch 92: 13.577935457229614 sec
Generator loss: 0.6960307359695435; Discriminator real loss: 0.5151056051254272; Discriminator fake loss: 0.7225325703620911; Discriminator total loss: 1.237638235092163;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.5234375; Discriminator total accuracy: 0.75390625

Time for epoch 93: 13.57841944694519 sec
Generator loss: 0.934684157371521; Discriminator real loss: 0.5127519965171814; Discriminator fake loss: 0.598900318145752; Discriminator total loss: 1.1116523742675781;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.890625; Discriminator total accuracy: 0.9140625

Time for epoch 94: 13.551013708114624 sec
Generator loss: 1.2758203744888306; Discriminator real loss: 0.6509400010108948; Discriminator fake loss: 0.4967840611934662; Discriminator total loss: 1.1477240324020386;
Discriminator real accuracy: 0.6875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.84375

Time for epoch 95: 13.62708592414856 sec
Generator loss: 0.9042481780052185; Discriminator real loss: 0.5422959327697754; Discriminator fake loss: 0.611251711845398; Discriminator total loss: 1.1535476446151733;
Discriminator real accuracy: 0.9140625; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.8828125

Time for epoch 96: 13.585700035095215 sec
Generator loss: 1.0221691131591797; Discriminator real loss: 0.5606429576873779; Discriminator fake loss: 0.5548912882804871; Discriminator total loss: 1.1155343055725098;
Discriminator real accuracy: 0.90625; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.92578125

Time for epoch 97: 13.564453601837158 sec
Generator loss: 1.0596702098846436; Discriminator real loss: 0.5912015438079834; Discriminator fake loss: 0.5519548654556274; Discriminator total loss: 1.1431564092636108;
Discriminator real accuracy: 0.8046875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.8984375

Time for epoch 98: 13.583955764770508 sec
Generator loss: 1.3468220233917236; Discriminator real loss: 0.6984901428222656; Discriminator fake loss: 0.5168130397796631; Discriminator total loss: 1.2153031826019287;
Discriminator real accuracy: 0.59375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.796875

Time for epoch 99: 13.577086687088013 sec
Generator loss: 1.0435971021652222; Discriminator real loss: 0.5315021872520447; Discriminator fake loss: 0.5386005640029907; Discriminator total loss: 1.0701026916503906;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.95703125

Time for epoch 100: 13.56429648399353 sec
Generator loss: 1.0316506624221802; Discriminator real loss: 0.6139765977859497; Discriminator fake loss: 0.5840139389038086; Discriminator total loss: 1.1979905366897583;
Discriminator real accuracy: 0.7890625; Discriminator fake accuracy: 0.9140625; Discriminator total accuracy: 0.8515625

Time for epoch 101: 13.603960037231445 sec
Generator loss: 0.9259592294692993; Discriminator real loss: 0.5111271142959595; Discriminator fake loss: 0.6143030524253845; Discriminator total loss: 1.1254301071166992;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.90625

Time for epoch 102: 13.63226580619812 sec
Generator loss: 0.7665817141532898; Discriminator real loss: 0.5252833366394043; Discriminator fake loss: 0.6661605834960938; Discriminator total loss: 1.191443920135498;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.6875; Discriminator total accuracy: 0.83984375

Time for epoch 103: 13.578639030456543 sec
Generator loss: 1.9242972135543823; Discriminator real loss: 1.1268278360366821; Discriminator fake loss: 0.4935021698474884; Discriminator total loss: 1.6203299760818481;
Discriminator real accuracy: 0.09375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.546875

Time for epoch 104: 13.587289094924927 sec
Generator loss: 0.9308390617370605; Discriminator real loss: 0.5427373647689819; Discriminator fake loss: 0.6289948225021362; Discriminator total loss: 1.1717321872711182;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.796875; Discriminator total accuracy: 0.8671875

Time for epoch 105: 13.586442470550537 sec
Generator loss: 1.0483256578445435; Discriminator real loss: 0.5957926511764526; Discriminator fake loss: 0.5750792026519775; Discriminator total loss: 1.1708718538284302;
Discriminator real accuracy: 0.875; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.91796875

Time for epoch 106: 13.856858015060425 sec
Generator loss: 1.3686473369598389; Discriminator real loss: 0.6382267475128174; Discriminator fake loss: 0.5198380351066589; Discriminator total loss: 1.158064842224121;
Discriminator real accuracy: 0.703125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.8515625

Time for epoch 107: 14.185992240905762 sec
Generator loss: 1.3524975776672363; Discriminator real loss: 0.7032572031021118; Discriminator fake loss: 0.49641427397727966; Discriminator total loss: 1.1996715068817139;
Discriminator real accuracy: 0.5390625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.76953125

Time for epoch 108: 13.608434915542603 sec
Generator loss: 1.6498174667358398; Discriminator real loss: 0.7841106653213501; Discriminator fake loss: 0.4497849643230438; Discriminator total loss: 1.2338956594467163;
Discriminator real accuracy: 0.4296875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.71484375

Time for epoch 109: 13.584957599639893 sec
Generator loss: 0.7665296792984009; Discriminator real loss: 0.518783450126648; Discriminator fake loss: 0.6761560440063477; Discriminator total loss: 1.1949394941329956;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.5546875; Discriminator total accuracy: 0.76953125

Time for epoch 110: 13.58716630935669 sec
Generator loss: 0.9746829867362976; Discriminator real loss: 0.5326802730560303; Discriminator fake loss: 0.6059466004371643; Discriminator total loss: 1.1386268138885498;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 0.921875; Discriminator total accuracy: 0.93359375

Time for epoch 111: 13.591520071029663 sec
Generator loss: 0.9532935619354248; Discriminator real loss: 0.5080582499504089; Discriminator fake loss: 0.589248776435852; Discriminator total loss: 1.0973069667816162;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.8828125; Discriminator total accuracy: 0.9296875

Time for epoch 112: 13.566996097564697 sec
Generator loss: 1.0886688232421875; Discriminator real loss: 0.5871351361274719; Discriminator fake loss: 0.5346342325210571; Discriminator total loss: 1.1217694282531738;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.92578125

Time for epoch 113: 13.571864604949951 sec
Generator loss: 1.0090479850769043; Discriminator real loss: 0.47218024730682373; Discriminator fake loss: 0.5612689256668091; Discriminator total loss: 1.0334491729736328;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.95703125

Time for epoch 114: 14.667350769042969 sec
Generator loss: 1.438086748123169; Discriminator real loss: 0.6211144924163818; Discriminator fake loss: 0.5093677639961243; Discriminator total loss: 1.1304821968078613;
Discriminator real accuracy: 0.7578125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.87890625

Time for epoch 115: 13.604777097702026 sec
Generator loss: 1.1812355518341064; Discriminator real loss: 0.5501081347465515; Discriminator fake loss: 0.5538535118103027; Discriminator total loss: 1.103961706161499;
Discriminator real accuracy: 0.875; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.91796875

Time for epoch 116: 13.58377718925476 sec
Generator loss: 0.95513916015625; Discriminator real loss: 0.5569872856140137; Discriminator fake loss: 0.5924094319343567; Discriminator total loss: 1.1493966579437256;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 0.8828125; Discriminator total accuracy: 0.921875

Time for epoch 117: 13.590199947357178 sec
Generator loss: 1.2511498928070068; Discriminator real loss: 0.6393465399742126; Discriminator fake loss: 0.5309058427810669; Discriminator total loss: 1.1702523231506348;
Discriminator real accuracy: 0.7265625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.859375

Time for epoch 118: 13.564466953277588 sec
Generator loss: 1.0624356269836426; Discriminator real loss: 0.5733642578125; Discriminator fake loss: 0.5596076250076294; Discriminator total loss: 1.1329718828201294;
Discriminator real accuracy: 0.9140625; Discriminator fake accuracy: 0.953125; Discriminator total accuracy: 0.93359375

Time for epoch 119: 13.58678412437439 sec
Generator loss: 1.5380859375; Discriminator real loss: 0.7445018291473389; Discriminator fake loss: 0.46487632393836975; Discriminator total loss: 1.2093781232833862;
Discriminator real accuracy: 0.390625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.6953125

Time for epoch 120: 13.603816509246826 sec
Generator loss: 0.8848221898078918; Discriminator real loss: 0.5596605539321899; Discriminator fake loss: 0.6061133146286011; Discriminator total loss: 1.165773868560791;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 0.828125; Discriminator total accuracy: 0.890625

Time for epoch 121: 13.63670015335083 sec
Generator loss: 1.3629281520843506; Discriminator real loss: 0.5964688062667847; Discriminator fake loss: 0.5149281024932861; Discriminator total loss: 1.1113969087600708;
Discriminator real accuracy: 0.765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.87890625

Time for epoch 122: 13.585182428359985 sec
Generator loss: 1.8751417398452759; Discriminator real loss: 0.9680516719818115; Discriminator fake loss: 0.48963332176208496; Discriminator total loss: 1.4576849937438965;
Discriminator real accuracy: 0.1953125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.59765625

Time for epoch 123: 13.771330833435059 sec
Generator loss: 1.0259878635406494; Discriminator real loss: 0.5353692770004272; Discriminator fake loss: 0.5609592199325562; Discriminator total loss: 1.0963284969329834;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.94140625

Time for epoch 124: 13.80387544631958 sec
Generator loss: 1.0114569664001465; Discriminator real loss: 0.531123161315918; Discriminator fake loss: 0.5798792243003845; Discriminator total loss: 1.1110024452209473;
Discriminator real accuracy: 0.9140625; Discriminator fake accuracy: 0.875; Discriminator total accuracy: 0.89453125

Time for epoch 125: 13.924433708190918 sec
Generator loss: 1.0501331090927124; Discriminator real loss: 0.5742347240447998; Discriminator fake loss: 0.567359983921051; Discriminator total loss: 1.141594648361206;
Discriminator real accuracy: 0.921875; Discriminator fake accuracy: 0.953125; Discriminator total accuracy: 0.9375

Time for epoch 126: 13.88794469833374 sec
Generator loss: 0.8221282958984375; Discriminator real loss: 0.5942443609237671; Discriminator fake loss: 0.649147629737854; Discriminator total loss: 1.243391990661621;
Discriminator real accuracy: 0.875; Discriminator fake accuracy: 0.75; Discriminator total accuracy: 0.8125

Time for epoch 127: 14.262543678283691 sec
Generator loss: 1.2399743795394897; Discriminator real loss: 0.5477085113525391; Discriminator fake loss: 0.5198847055435181; Discriminator total loss: 1.0675932168960571;
Discriminator real accuracy: 0.875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.93359375

Time for epoch 128: 13.62658143043518 sec
Generator loss: 0.8442866802215576; Discriminator real loss: 0.5048317313194275; Discriminator fake loss: 0.6613195538520813; Discriminator total loss: 1.1661512851715088;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.734375; Discriminator total accuracy: 0.85546875

Time for epoch 129: 13.569528818130493 sec
Generator loss: 1.1411027908325195; Discriminator real loss: 0.5453622341156006; Discriminator fake loss: 0.5472733378410339; Discriminator total loss: 1.0926356315612793;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.9375

Time for epoch 130: 13.580282926559448 sec
Generator loss: 1.7184512615203857; Discriminator real loss: 0.8339487314224243; Discriminator fake loss: 0.49996256828308105; Discriminator total loss: 1.3339112997055054;
Discriminator real accuracy: 0.359375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.6796875

Time for epoch 131: 13.65175485610962 sec
Generator loss: 1.7544853687286377; Discriminator real loss: 0.744749903678894; Discriminator fake loss: 0.47577375173568726; Discriminator total loss: 1.2205235958099365;
Discriminator real accuracy: 0.4765625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.73828125

Time for epoch 132: 13.668455362319946 sec
Generator loss: 1.1741306781768799; Discriminator real loss: 0.5458588600158691; Discriminator fake loss: 0.5279901027679443; Discriminator total loss: 1.0738489627838135;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.95703125

Time for epoch 133: 13.830002069473267 sec
Generator loss: 1.3025885820388794; Discriminator real loss: 0.5449017882347107; Discriminator fake loss: 0.5040889978408813; Discriminator total loss: 1.0489907264709473;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9375

Time for epoch 134: 13.710025072097778 sec
Generator loss: 1.2806553840637207; Discriminator real loss: 0.5334212779998779; Discriminator fake loss: 0.4973709285259247; Discriminator total loss: 1.030792236328125;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9375

Time for epoch 135: 13.636008501052856 sec
Generator loss: 1.346204400062561; Discriminator real loss: 0.5648772716522217; Discriminator fake loss: 0.5006968975067139; Discriminator total loss: 1.0655741691589355;
Discriminator real accuracy: 0.890625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9453125

Time for epoch 136: 13.496389865875244 sec
Generator loss: 0.9015350341796875; Discriminator real loss: 0.5850313901901245; Discriminator fake loss: 0.6301877498626709; Discriminator total loss: 1.2152191400527954;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.8046875; Discriminator total accuracy: 0.89453125

Time for epoch 137: 13.7585928440094 sec
Generator loss: 0.9759682416915894; Discriminator real loss: 0.4955129027366638; Discriminator fake loss: 0.5843037366867065; Discriminator total loss: 1.0798165798187256;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.8671875; Discriminator total accuracy: 0.91796875

Time for epoch 138: 13.474107503890991 sec
Generator loss: 1.4148294925689697; Discriminator real loss: 0.603312611579895; Discriminator fake loss: 0.49790433049201965; Discriminator total loss: 1.1012169122695923;
Discriminator real accuracy: 0.765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.87890625

Time for epoch 139: 13.701762676239014 sec
Generator loss: 1.027721881866455; Discriminator real loss: 0.5838252902030945; Discriminator fake loss: 0.5829060077667236; Discriminator total loss: 1.166731357574463;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.921875; Discriminator total accuracy: 0.90234375

Time for epoch 140: 14.543870687484741 sec
Generator loss: 1.032198429107666; Discriminator real loss: 0.5252765417098999; Discriminator fake loss: 0.559855580329895; Discriminator total loss: 1.085132122039795;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.94140625

Time for epoch 141: 13.430000305175781 sec
Generator loss: 1.2932778596878052; Discriminator real loss: 0.5293026566505432; Discriminator fake loss: 0.537003755569458; Discriminator total loss: 1.0663063526153564;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.9296875

Time for epoch 142: 13.382317543029785 sec
Generator loss: 1.4500682353973389; Discriminator real loss: 0.6151019930839539; Discriminator fake loss: 0.46710437536239624; Discriminator total loss: 1.08220636844635;
Discriminator real accuracy: 0.8359375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9140625

Time for epoch 143: 13.933412790298462 sec
Generator loss: 1.3573904037475586; Discriminator real loss: 0.5594446063041687; Discriminator fake loss: 0.48956966400146484; Discriminator total loss: 1.0490143299102783;
Discriminator real accuracy: 0.859375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9296875

Time for epoch 144: 14.03592038154602 sec
Generator loss: 1.3368719816207886; Discriminator real loss: 0.5224717259407043; Discriminator fake loss: 0.5045676827430725; Discriminator total loss: 1.0270394086837769;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98046875

Time for epoch 145: 14.71405816078186 sec
Generator loss: 1.5636605024337769; Discriminator real loss: 0.6717145442962646; Discriminator fake loss: 0.49088042974472046; Discriminator total loss: 1.1625950336456299;
Discriminator real accuracy: 0.6171875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.8046875

Time for epoch 146: 13.420981884002686 sec
Generator loss: 1.2429139614105225; Discriminator real loss: 0.5256198048591614; Discriminator fake loss: 0.5045517086982727; Discriminator total loss: 1.030171513557434;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.95703125

Time for epoch 147: 13.438832998275757 sec
Generator loss: 1.0192928314208984; Discriminator real loss: 0.5164980292320251; Discriminator fake loss: 0.5882257223129272; Discriminator total loss: 1.1047236919403076;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9140625; Discriminator total accuracy: 0.94921875

Time for epoch 148: 13.37727403640747 sec
Generator loss: 1.3594398498535156; Discriminator real loss: 0.545964241027832; Discriminator fake loss: 0.5201653242111206; Discriminator total loss: 1.0661295652389526;
Discriminator real accuracy: 0.84375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.91796875

Time for epoch 149: 13.5176682472229 sec
Generator loss: 1.4031572341918945; Discriminator real loss: 0.5898900032043457; Discriminator fake loss: 0.48242896795272827; Discriminator total loss: 1.0723190307617188;
Discriminator real accuracy: 0.8671875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.93359375

Time for epoch 150: 13.392743587493896 sec
Generator loss: 1.436098575592041; Discriminator real loss: 0.5986723303794861; Discriminator fake loss: 0.49893438816070557; Discriminator total loss: 1.0976066589355469;
Discriminator real accuracy: 0.8125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.90625

Time for epoch 151: 13.384239196777344 sec
Generator loss: 1.2725895643234253; Discriminator real loss: 0.5404964685440063; Discriminator fake loss: 0.49182435870170593; Discriminator total loss: 1.0323208570480347;
Discriminator real accuracy: 0.921875; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.94140625

Time for epoch 152: 13.388230323791504 sec
Generator loss: 1.1425286531448364; Discriminator real loss: 0.48979058861732483; Discriminator fake loss: 0.5440106391906738; Discriminator total loss: 1.0338011980056763;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.9609375

Time for epoch 153: 13.409550905227661 sec
Generator loss: 0.9990755319595337; Discriminator real loss: 0.49282702803611755; Discriminator fake loss: 0.5991988182067871; Discriminator total loss: 1.092025876045227;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.8359375; Discriminator total accuracy: 0.91796875

Time for epoch 154: 13.507624626159668 sec
Generator loss: 1.2145551443099976; Discriminator real loss: 0.5232667326927185; Discriminator fake loss: 0.5169892311096191; Discriminator total loss: 1.0402560234069824;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.9609375

Time for epoch 155: 14.165225505828857 sec
Generator loss: 1.8893364667892456; Discriminator real loss: 0.7443821430206299; Discriminator fake loss: 0.4490251839160919; Discriminator total loss: 1.1934072971343994;
Discriminator real accuracy: 0.4765625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.73828125

Time for epoch 156: 13.4839928150177 sec
Generator loss: 1.0453176498413086; Discriminator real loss: 0.4710620045661926; Discriminator fake loss: 0.5808879137039185; Discriminator total loss: 1.0519499778747559;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.921875; Discriminator total accuracy: 0.9609375

Time for epoch 157: 13.387232303619385 sec
Generator loss: 1.2876533269882202; Discriminator real loss: 0.5412137508392334; Discriminator fake loss: 0.5348038673400879; Discriminator total loss: 1.0760176181793213;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.96484375

Time for epoch 158: 13.395146131515503 sec
Generator loss: 1.5817406177520752; Discriminator real loss: 0.6052377820014954; Discriminator fake loss: 0.514032244682312; Discriminator total loss: 1.1192700862884521;
Discriminator real accuracy: 0.8828125; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.92578125

Time for epoch 159: 13.3979811668396 sec
Generator loss: 2.0813770294189453; Discriminator real loss: 0.8529462814331055; Discriminator fake loss: 0.5379562377929688; Discriminator total loss: 1.3909025192260742;
Discriminator real accuracy: 0.2578125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.62890625

Time for epoch 160: 13.444117307662964 sec
Generator loss: 1.2292402982711792; Discriminator real loss: 0.5126807689666748; Discriminator fake loss: 0.4945853352546692; Discriminator total loss: 1.0072660446166992;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 161: 13.383832693099976 sec
Generator loss: 1.519707202911377; Discriminator real loss: 0.5677231550216675; Discriminator fake loss: 0.5251961946487427; Discriminator total loss: 1.0929193496704102;
Discriminator real accuracy: 0.8203125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.91015625

Time for epoch 162: 13.404525756835938 sec
Generator loss: 1.2559280395507812; Discriminator real loss: 0.4696740508079529; Discriminator fake loss: 0.5163059830665588; Discriminator total loss: 0.9859800338745117;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.9609375

Time for epoch 163: 13.384217977523804 sec
Generator loss: 1.2122899293899536; Discriminator real loss: 0.5023442506790161; Discriminator fake loss: 0.5209850668907166; Discriminator total loss: 1.023329257965088;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.9765625

Time for epoch 164: 13.384211540222168 sec
Generator loss: 1.3113309144973755; Discriminator real loss: 0.5377755761146545; Discriminator fake loss: 0.531521201133728; Discriminator total loss: 1.0692968368530273;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9765625

Time for epoch 165: 13.39334750175476 sec
Generator loss: 1.3591101169586182; Discriminator real loss: 0.5254594087600708; Discriminator fake loss: 0.557628333568573; Discriminator total loss: 1.083087682723999;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.97265625

Time for epoch 166: 13.483735084533691 sec
Generator loss: 1.390531301498413; Discriminator real loss: 0.5847582817077637; Discriminator fake loss: 0.5090826749801636; Discriminator total loss: 1.0938409566879272;
Discriminator real accuracy: 0.890625; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9375

Time for epoch 167: 13.428938388824463 sec
Generator loss: 1.301847219467163; Discriminator real loss: 0.5185551047325134; Discriminator fake loss: 0.5136184692382812; Discriminator total loss: 1.0321736335754395;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.984375

Time for epoch 168: 13.420950651168823 sec
Generator loss: 1.300527811050415; Discriminator real loss: 0.5042793154716492; Discriminator fake loss: 0.5041550397872925; Discriminator total loss: 1.0084342956542969;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.9765625

Time for epoch 169: 13.3792724609375 sec
Generator loss: 1.718947172164917; Discriminator real loss: 0.6222492456436157; Discriminator fake loss: 0.5140167474746704; Discriminator total loss: 1.1362659931182861;
Discriminator real accuracy: 0.7734375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.88671875

Time for epoch 170: 13.394197463989258 sec
Generator loss: 1.3350658416748047; Discriminator real loss: 0.498038113117218; Discriminator fake loss: 0.5210492610931396; Discriminator total loss: 1.019087314605713;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 171: 13.37276816368103 sec
Generator loss: 1.3435312509536743; Discriminator real loss: 0.5657737255096436; Discriminator fake loss: 0.4883393347263336; Discriminator total loss: 1.0541130304336548;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.96875

Time for epoch 172: 13.385794639587402 sec
Generator loss: 1.3443512916564941; Discriminator real loss: 0.5086871981620789; Discriminator fake loss: 0.49380695819854736; Discriminator total loss: 1.0024940967559814;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.984375

Time for epoch 173: 13.521632432937622 sec
Generator loss: 1.1664788722991943; Discriminator real loss: 0.48182156682014465; Discriminator fake loss: 0.538268506526947; Discriminator total loss: 1.020090103149414;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9296875; Discriminator total accuracy: 0.9609375

Time for epoch 174: 13.392189264297485 sec
Generator loss: 1.1803611516952515; Discriminator real loss: 0.5081963539123535; Discriminator fake loss: 0.53658527135849; Discriminator total loss: 1.0447816848754883;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 175: 13.401460647583008 sec
Generator loss: 1.0445961952209473; Discriminator real loss: 0.550826907157898; Discriminator fake loss: 0.570110023021698; Discriminator total loss: 1.1209368705749512;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.8984375; Discriminator total accuracy: 0.91796875

Time for epoch 176: 13.36902379989624 sec
Generator loss: 1.0718994140625; Discriminator real loss: 0.5330079793930054; Discriminator fake loss: 0.5660569667816162; Discriminator total loss: 1.0990649461746216;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.8515625; Discriminator total accuracy: 0.91796875

Time for epoch 177: 13.376365184783936 sec
Generator loss: 1.3689122200012207; Discriminator real loss: 0.525894045829773; Discriminator fake loss: 0.4844866394996643; Discriminator total loss: 1.010380744934082;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98828125

Time for epoch 178: 13.412519454956055 sec
Generator loss: 1.0359525680541992; Discriminator real loss: 0.5222678184509277; Discriminator fake loss: 0.5473929643630981; Discriminator total loss: 1.0696607828140259;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.8828125; Discriminator total accuracy: 0.94140625

Time for epoch 179: 13.40968370437622 sec
Generator loss: 1.4813909530639648; Discriminator real loss: 0.5190514326095581; Discriminator fake loss: 0.4761185348033905; Discriminator total loss: 0.995169997215271;
Discriminator real accuracy: 0.9375; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9609375

Time for epoch 180: 13.448670625686646 sec
Generator loss: 1.4575080871582031; Discriminator real loss: 0.5626564621925354; Discriminator fake loss: 0.5284988880157471; Discriminator total loss: 1.0911552906036377;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98046875

Time for epoch 181: 13.423327922821045 sec
Generator loss: 1.5869982242584229; Discriminator real loss: 0.545656681060791; Discriminator fake loss: 0.5024796724319458; Discriminator total loss: 1.0481363534927368;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9765625

Time for epoch 182: 13.495715856552124 sec
Generator loss: 1.6185638904571533; Discriminator real loss: 0.5657243132591248; Discriminator fake loss: 0.5074223279953003; Discriminator total loss: 1.0731465816497803;
Discriminator real accuracy: 0.90625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.94921875

Time for epoch 183: 15.207529306411743 sec
Generator loss: 0.98927903175354; Discriminator real loss: 0.5600399971008301; Discriminator fake loss: 0.6102002263069153; Discriminator total loss: 1.1702401638031006;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.859375; Discriminator total accuracy: 0.9296875

Time for epoch 184: 13.699532985687256 sec
Generator loss: 1.3105733394622803; Discriminator real loss: 0.5096421837806702; Discriminator fake loss: 0.49751371145248413; Discriminator total loss: 1.0071558952331543;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 185: 13.891358852386475 sec
Generator loss: 1.2502706050872803; Discriminator real loss: 0.4949358403682709; Discriminator fake loss: 0.5202723741531372; Discriminator total loss: 1.0152082443237305;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.97265625

Time for epoch 186: 13.617802381515503 sec
Generator loss: 1.4600969552993774; Discriminator real loss: 0.49715691804885864; Discriminator fake loss: 0.49188223481178284; Discriminator total loss: 0.9890391826629639;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 187: 13.458036661148071 sec
Generator loss: 1.2444244623184204; Discriminator real loss: 0.4777953624725342; Discriminator fake loss: 0.534827470779419; Discriminator total loss: 1.0126228332519531;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.984375

Time for epoch 188: 13.334105014801025 sec
Generator loss: 1.49273681640625; Discriminator real loss: 0.5106769800186157; Discriminator fake loss: 0.4838075041770935; Discriminator total loss: 0.9944844841957092;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.984375

Time for epoch 189: 13.363022565841675 sec
Generator loss: 1.654160976409912; Discriminator real loss: 0.5418825149536133; Discriminator fake loss: 0.4819176197052002; Discriminator total loss: 1.0238001346588135;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.98828125

Time for epoch 190: 13.377174377441406 sec
Generator loss: 1.4541082382202148; Discriminator real loss: 0.5252652168273926; Discriminator fake loss: 0.4827613830566406; Discriminator total loss: 1.0080265998840332;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98828125

Time for epoch 191: 13.378143548965454 sec
Generator loss: 1.5351624488830566; Discriminator real loss: 0.5441299080848694; Discriminator fake loss: 0.5004242658615112; Discriminator total loss: 1.0445542335510254;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.96484375

Time for epoch 192: 13.379848957061768 sec
Generator loss: 1.3072929382324219; Discriminator real loss: 0.47090739011764526; Discriminator fake loss: 0.5231645703315735; Discriminator total loss: 0.9940719604492188;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 193: 13.437662839889526 sec
Generator loss: 1.522625207901001; Discriminator real loss: 0.5368325114250183; Discriminator fake loss: 0.4832721948623657; Discriminator total loss: 1.0201046466827393;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9765625

Time for epoch 194: 13.37911057472229 sec
Generator loss: 1.0308966636657715; Discriminator real loss: 0.5363762378692627; Discriminator fake loss: 0.6092129349708557; Discriminator total loss: 1.1455891132354736;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.859375; Discriminator total accuracy: 0.9296875

Time for epoch 195: 13.367652177810669 sec
Generator loss: 1.4392900466918945; Discriminator real loss: 0.5062849521636963; Discriminator fake loss: 0.5074648857116699; Discriminator total loss: 1.0137498378753662;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98828125

Time for epoch 196: 13.370580911636353 sec
Generator loss: 1.214160680770874; Discriminator real loss: 0.5000854134559631; Discriminator fake loss: 0.5241934061050415; Discriminator total loss: 1.0242788791656494;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.97265625

Time for epoch 197: 13.37514042854309 sec
Generator loss: 1.549514889717102; Discriminator real loss: 0.5358608365058899; Discriminator fake loss: 0.49834275245666504; Discriminator total loss: 1.0342035293579102;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98828125

Time for epoch 198: 13.361942052841187 sec
Generator loss: 1.2971309423446655; Discriminator real loss: 0.5027028918266296; Discriminator fake loss: 0.5328233242034912; Discriminator total loss: 1.0355262756347656;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.98046875

Time for epoch 199: 13.35874605178833 sec
Generator loss: 1.7017436027526855; Discriminator real loss: 0.550627589225769; Discriminator fake loss: 0.5120470523834229; Discriminator total loss: 1.062674641609192;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.97265625

Time for epoch 200: 13.38010025024414 sec
Generator loss: 1.7697503566741943; Discriminator real loss: 0.5758851170539856; Discriminator fake loss: 0.5054556727409363; Discriminator total loss: 1.0813407897949219;
Discriminator real accuracy: 0.8984375; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9453125

Time for epoch 201: 13.378491878509521 sec
Generator loss: 1.4987895488739014; Discriminator real loss: 0.516356348991394; Discriminator fake loss: 0.48144957423210144; Discriminator total loss: 0.9978059530258179;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98046875

Time for epoch 202: 13.348287343978882 sec
Generator loss: 1.5079338550567627; Discriminator real loss: 0.5218073129653931; Discriminator fake loss: 0.4753876328468323; Discriminator total loss: 0.9971949458122253;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.98046875

Time for epoch 203: 13.344151735305786 sec
Generator loss: 1.2019038200378418; Discriminator real loss: 0.48390868306159973; Discriminator fake loss: 0.5423463582992554; Discriminator total loss: 1.0262550115585327;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.90625; Discriminator total accuracy: 0.953125

Time for epoch 204: 13.325089931488037 sec
Generator loss: 1.7968653440475464; Discriminator real loss: 0.5907953977584839; Discriminator fake loss: 0.48830777406692505; Discriminator total loss: 1.0791032314300537;
Discriminator real accuracy: 0.8359375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.91796875

Time for epoch 205: 13.330610036849976 sec
Generator loss: 1.4332311153411865; Discriminator real loss: 0.5003555417060852; Discriminator fake loss: 0.5174669027328491; Discriminator total loss: 1.017822504043579;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 206: 13.374155759811401 sec
Generator loss: 1.8145413398742676; Discriminator real loss: 0.5462446212768555; Discriminator fake loss: 0.4725413918495178; Discriminator total loss: 1.0187859535217285;
Discriminator real accuracy: 0.90625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.953125

Time for epoch 207: 13.3506760597229 sec
Generator loss: 1.6097195148468018; Discriminator real loss: 0.5592440366744995; Discriminator fake loss: 0.486044317483902; Discriminator total loss: 1.045288324356079;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9765625

Time for epoch 208: 13.351757764816284 sec
Generator loss: 1.629738450050354; Discriminator real loss: 0.5108606815338135; Discriminator fake loss: 0.5218952298164368; Discriminator total loss: 1.0327558517456055;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 209: 13.353990077972412 sec
Generator loss: 1.68898344039917; Discriminator real loss: 0.5028862357139587; Discriminator fake loss: 0.49880295991897583; Discriminator total loss: 1.0016891956329346;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 210: 13.32019305229187 sec
Generator loss: 1.6541037559509277; Discriminator real loss: 0.4961298108100891; Discriminator fake loss: 0.5153158903121948; Discriminator total loss: 1.0114457607269287;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 211: 13.318264245986938 sec
Generator loss: 1.7409558296203613; Discriminator real loss: 0.5422765016555786; Discriminator fake loss: 0.49850761890411377; Discriminator total loss: 1.0407841205596924;
Discriminator real accuracy: 0.921875; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.94921875

Time for epoch 212: 13.339316368103027 sec
Generator loss: 1.5244320631027222; Discriminator real loss: 0.5789247751235962; Discriminator fake loss: 0.5041561722755432; Discriminator total loss: 1.0830810070037842;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.984375

Time for epoch 213: 13.322294473648071 sec
Generator loss: 1.6528291702270508; Discriminator real loss: 0.5501244068145752; Discriminator fake loss: 0.45886433124542236; Discriminator total loss: 1.0089887380599976;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 214: 13.319986581802368 sec
Generator loss: 1.466456651687622; Discriminator real loss: 0.49960583448410034; Discriminator fake loss: 0.5268728733062744; Discriminator total loss: 1.0264787673950195;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 215: 13.325373649597168 sec
Generator loss: 1.4505983591079712; Discriminator real loss: 0.49474915862083435; Discriminator fake loss: 0.57552170753479; Discriminator total loss: 1.0702708959579468;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 216: 13.349959135055542 sec
Generator loss: 1.847153663635254; Discriminator real loss: 0.5249242186546326; Discriminator fake loss: 0.4542941451072693; Discriminator total loss: 0.9792183637619019;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9765625

Time for epoch 217: 13.353543281555176 sec
Generator loss: 1.686131238937378; Discriminator real loss: 0.5361796021461487; Discriminator fake loss: 0.5059247612953186; Discriminator total loss: 1.0421043634414673;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 218: 13.36022663116455 sec
Generator loss: 1.9150848388671875; Discriminator real loss: 0.5818549990653992; Discriminator fake loss: 0.4938070774078369; Discriminator total loss: 1.0756621360778809;
Discriminator real accuracy: 0.859375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9296875

Time for epoch 219: 13.379608392715454 sec
Generator loss: 1.7829086780548096; Discriminator real loss: 0.5099830627441406; Discriminator fake loss: 0.5256799459457397; Discriminator total loss: 1.0356630086898804;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.984375

Time for epoch 220: 13.329745292663574 sec
Generator loss: 1.3986032009124756; Discriminator real loss: 0.5025372505187988; Discriminator fake loss: 0.5136547684669495; Discriminator total loss: 1.0161919593811035;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 221: 13.310363292694092 sec
Generator loss: 2.0438756942749023; Discriminator real loss: 0.624692440032959; Discriminator fake loss: 0.48413875699043274; Discriminator total loss: 1.1088311672210693;
Discriminator real accuracy: 0.7578125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.87890625

Time for epoch 222: 13.304198026657104 sec
Generator loss: 1.3850820064544678; Discriminator real loss: 0.5533366203308105; Discriminator fake loss: 0.4675535559654236; Discriminator total loss: 1.020890235900879;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 223: 13.345509052276611 sec
Generator loss: 1.4329016208648682; Discriminator real loss: 0.5004658699035645; Discriminator fake loss: 0.5143499374389648; Discriminator total loss: 1.0148158073425293;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 224: 13.323714971542358 sec
Generator loss: 1.2750260829925537; Discriminator real loss: 0.4830496311187744; Discriminator fake loss: 0.52382892370224; Discriminator total loss: 1.0068786144256592;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 225: 13.330332040786743 sec
Generator loss: 1.4480036497116089; Discriminator real loss: 0.5408235788345337; Discriminator fake loss: 0.49194055795669556; Discriminator total loss: 1.032764196395874;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 226: 13.337510347366333 sec
Generator loss: 1.3805065155029297; Discriminator real loss: 0.4860076308250427; Discriminator fake loss: 0.5169156789779663; Discriminator total loss: 1.0029232501983643;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 227: 13.342391014099121 sec
Generator loss: 1.6962454319000244; Discriminator real loss: 0.4912521243095398; Discriminator fake loss: 0.4798874258995056; Discriminator total loss: 0.9711395502090454;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 228: 13.313509702682495 sec
Generator loss: 1.5539374351501465; Discriminator real loss: 0.49588197469711304; Discriminator fake loss: 0.5113195180892944; Discriminator total loss: 1.0072014331817627;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98046875

Time for epoch 229: 13.308951616287231 sec
Generator loss: 1.5896987915039062; Discriminator real loss: 0.5214967131614685; Discriminator fake loss: 0.4743070602416992; Discriminator total loss: 0.9958037734031677;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.9765625

Time for epoch 230: 13.323526382446289 sec
Generator loss: 1.215649127960205; Discriminator real loss: 0.5248844027519226; Discriminator fake loss: 0.5659189224243164; Discriminator total loss: 1.0908033847808838;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.96875

Time for epoch 231: 15.51614761352539 sec
Generator loss: 1.5066726207733154; Discriminator real loss: 0.5203863978385925; Discriminator fake loss: 0.506280779838562; Discriminator total loss: 1.0266671180725098;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 232: 13.346876621246338 sec
Generator loss: 1.2527573108673096; Discriminator real loss: 0.48999306559562683; Discriminator fake loss: 0.5320420861244202; Discriminator total loss: 1.0220351219177246;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.97265625

Time for epoch 233: 13.318673133850098 sec
Generator loss: 1.5297317504882812; Discriminator real loss: 0.5412864685058594; Discriminator fake loss: 0.525161623954773; Discriminator total loss: 1.0664480924606323;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 234: 13.335263967514038 sec
Generator loss: 1.3861150741577148; Discriminator real loss: 0.487541526556015; Discriminator fake loss: 0.5108355283737183; Discriminator total loss: 0.9983770847320557;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.98046875

Time for epoch 235: 13.327067852020264 sec
Generator loss: 1.5810129642486572; Discriminator real loss: 0.5381859540939331; Discriminator fake loss: 0.4967116713523865; Discriminator total loss: 1.0348975658416748;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 236: 13.30172061920166 sec
Generator loss: 1.6544957160949707; Discriminator real loss: 0.4830361604690552; Discriminator fake loss: 0.5039265751838684; Discriminator total loss: 0.9869627356529236;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 237: 13.33349347114563 sec
Generator loss: 1.7468392848968506; Discriminator real loss: 0.5777401328086853; Discriminator fake loss: 0.505102813243866; Discriminator total loss: 1.0828429460525513;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 238: 13.33183240890503 sec
Generator loss: 1.4982068538665771; Discriminator real loss: 0.5104821920394897; Discriminator fake loss: 0.5237152576446533; Discriminator total loss: 1.034197449684143;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 239: 13.335822582244873 sec
Generator loss: 1.4960781335830688; Discriminator real loss: 0.49071627855300903; Discriminator fake loss: 0.5403553247451782; Discriminator total loss: 1.031071662902832;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 240: 13.29429006576538 sec
Generator loss: 1.501844048500061; Discriminator real loss: 0.518334150314331; Discriminator fake loss: 0.527250349521637; Discriminator total loss: 1.0455844402313232;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 241: 13.345963478088379 sec
Generator loss: 1.6743040084838867; Discriminator real loss: 0.5171114802360535; Discriminator fake loss: 0.5193299651145935; Discriminator total loss: 1.036441445350647;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 242: 13.341964960098267 sec
Generator loss: 1.6484335660934448; Discriminator real loss: 0.5155518054962158; Discriminator fake loss: 0.5255484580993652; Discriminator total loss: 1.041100263595581;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 243: 13.292257070541382 sec
Generator loss: 1.4294209480285645; Discriminator real loss: 0.49559035897254944; Discriminator fake loss: 0.5432937145233154; Discriminator total loss: 1.0388840436935425;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98046875

Time for epoch 244: 13.356583595275879 sec
Generator loss: 1.602254867553711; Discriminator real loss: 0.5025526285171509; Discriminator fake loss: 0.5212674140930176; Discriminator total loss: 1.0238200426101685;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 245: 13.382120132446289 sec
Generator loss: 1.5274715423583984; Discriminator real loss: 0.4818829596042633; Discriminator fake loss: 0.5066999197006226; Discriminator total loss: 0.9885828495025635;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 246: 13.316818952560425 sec
Generator loss: 1.4768157005310059; Discriminator real loss: 0.5012514591217041; Discriminator fake loss: 0.4851377308368683; Discriminator total loss: 0.98638916015625;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 247: 13.326662540435791 sec
Generator loss: 1.3216147422790527; Discriminator real loss: 0.4887513220310211; Discriminator fake loss: 0.5376499891281128; Discriminator total loss: 1.0264012813568115;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.98046875

Time for epoch 248: 13.316564083099365 sec
Generator loss: 1.7088687419891357; Discriminator real loss: 0.517780065536499; Discriminator fake loss: 0.4962581396102905; Discriminator total loss: 1.0140382051467896;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 249: 13.305051803588867 sec
Generator loss: 1.6042184829711914; Discriminator real loss: 0.4922337234020233; Discriminator fake loss: 0.49562928080558777; Discriminator total loss: 0.9878630042076111;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 250: 13.349242210388184 sec
Generator loss: 1.9993536472320557; Discriminator real loss: 0.5667555332183838; Discriminator fake loss: 0.4720136523246765; Discriminator total loss: 1.038769245147705;
Discriminator real accuracy: 0.9296875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.96484375

Time for epoch 251: 13.319799900054932 sec
Generator loss: 2.044558525085449; Discriminator real loss: 0.5603379011154175; Discriminator fake loss: 0.4852844476699829; Discriminator total loss: 1.0456223487854004;
Discriminator real accuracy: 0.9453125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.97265625

Time for epoch 252: 13.328846216201782 sec
Generator loss: 1.5483803749084473; Discriminator real loss: 0.48964765667915344; Discriminator fake loss: 0.47905075550079346; Discriminator total loss: 0.9686983823776245;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 253: 13.343356609344482 sec
Generator loss: 1.6224005222320557; Discriminator real loss: 0.4986318349838257; Discriminator fake loss: 0.49462002515792847; Discriminator total loss: 0.9932518601417542;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 254: 13.347704410552979 sec
Generator loss: 1.6644878387451172; Discriminator real loss: 0.4902372360229492; Discriminator fake loss: 0.5264735817909241; Discriminator total loss: 1.0167107582092285;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 255: 13.33543610572815 sec
Generator loss: 1.6851370334625244; Discriminator real loss: 0.5000519752502441; Discriminator fake loss: 0.5246349573135376; Discriminator total loss: 1.0246869325637817;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 256: 13.326265096664429 sec
Generator loss: 1.4998071193695068; Discriminator real loss: 0.49498653411865234; Discriminator fake loss: 0.5369395017623901; Discriminator total loss: 1.0319260358810425;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 257: 13.332154989242554 sec
Generator loss: 1.6735347509384155; Discriminator real loss: 0.5128108263015747; Discriminator fake loss: 0.44614070653915405; Discriminator total loss: 0.9589515328407288;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 258: 13.363214015960693 sec
Generator loss: 1.7099944353103638; Discriminator real loss: 0.5288369059562683; Discriminator fake loss: 0.5041452050209045; Discriminator total loss: 1.0329821109771729;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.98046875

Time for epoch 259: 13.303633451461792 sec
Generator loss: 1.436394214630127; Discriminator real loss: 0.4727603793144226; Discriminator fake loss: 0.4820707440376282; Discriminator total loss: 0.9548311233520508;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 260: 13.340578317642212 sec
Generator loss: 1.5373375415802002; Discriminator real loss: 0.5257817506790161; Discriminator fake loss: 0.4814973771572113; Discriminator total loss: 1.0072791576385498;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 261: 13.335310935974121 sec
Generator loss: 1.7634329795837402; Discriminator real loss: 0.5029168725013733; Discriminator fake loss: 0.5296316146850586; Discriminator total loss: 1.032548427581787;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 262: 13.340503454208374 sec
Generator loss: 1.5716185569763184; Discriminator real loss: 0.48407408595085144; Discriminator fake loss: 0.47569024562835693; Discriminator total loss: 0.9597643613815308;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 263: 13.34910535812378 sec
Generator loss: 1.7263541221618652; Discriminator real loss: 0.5095446109771729; Discriminator fake loss: 0.5029730796813965; Discriminator total loss: 1.0125176906585693;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 264: 13.283918380737305 sec
Generator loss: 1.4977220296859741; Discriminator real loss: 0.4886767268180847; Discriminator fake loss: 0.5007575750350952; Discriminator total loss: 0.9894343018531799;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 265: 13.326791763305664 sec
Generator loss: 1.5067009925842285; Discriminator real loss: 0.44738835096359253; Discriminator fake loss: 0.5053592920303345; Discriminator total loss: 0.952747642993927;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 266: 13.322392225265503 sec
Generator loss: 1.5930700302124023; Discriminator real loss: 0.5010366439819336; Discriminator fake loss: 0.4756116271018982; Discriminator total loss: 0.9766482710838318;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 267: 13.318204879760742 sec
Generator loss: 1.4766533374786377; Discriminator real loss: 0.4919603168964386; Discriminator fake loss: 0.5217437744140625; Discriminator total loss: 1.0137040615081787;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 268: 13.320414066314697 sec
Generator loss: 1.3761014938354492; Discriminator real loss: 0.48994383215904236; Discriminator fake loss: 0.504749596118927; Discriminator total loss: 0.994693398475647;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 269: 13.31407380104065 sec
Generator loss: 1.914547324180603; Discriminator real loss: 0.5721789598464966; Discriminator fake loss: 0.5225300192832947; Discriminator total loss: 1.0947089195251465;
Discriminator real accuracy: 0.921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9609375

Time for epoch 270: 13.357669830322266 sec
Generator loss: 1.6722831726074219; Discriminator real loss: 0.49894583225250244; Discriminator fake loss: 0.49918633699417114; Discriminator total loss: 0.9981321692466736;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 271: 13.3871009349823 sec
Generator loss: 1.9184600114822388; Discriminator real loss: 0.5363557934761047; Discriminator fake loss: 0.47123560309410095; Discriminator total loss: 1.0075913667678833;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 272: 13.342499017715454 sec
Generator loss: 1.5060497522354126; Discriminator real loss: 0.48694688081741333; Discriminator fake loss: 0.5444961786270142; Discriminator total loss: 1.0314431190490723;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 273: 13.342282056808472 sec
Generator loss: 1.3584332466125488; Discriminator real loss: 0.49571478366851807; Discriminator fake loss: 0.5074012279510498; Discriminator total loss: 1.0031160116195679;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.984375

Time for epoch 274: 13.280943393707275 sec
Generator loss: 1.7470731735229492; Discriminator real loss: 0.5286474227905273; Discriminator fake loss: 0.4765743315219879; Discriminator total loss: 1.0052217245101929;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 275: 13.340774536132812 sec
Generator loss: 1.7140687704086304; Discriminator real loss: 0.4936565160751343; Discriminator fake loss: 0.49491652846336365; Discriminator total loss: 0.9885730743408203;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 276: 13.322077989578247 sec
Generator loss: 1.8027756214141846; Discriminator real loss: 0.5399339199066162; Discriminator fake loss: 0.5489298105239868; Discriminator total loss: 1.088863730430603;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 277: 13.292684078216553 sec
Generator loss: 1.6700096130371094; Discriminator real loss: 0.5132964849472046; Discriminator fake loss: 0.5433720350265503; Discriminator total loss: 1.0566685199737549;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 278: 13.320955753326416 sec
Generator loss: 1.3597655296325684; Discriminator real loss: 0.4651791751384735; Discriminator fake loss: 0.5347540378570557; Discriminator total loss: 0.9999332427978516;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.98046875

Time for epoch 279: 13.316502332687378 sec
Generator loss: 1.629601001739502; Discriminator real loss: 0.528911828994751; Discriminator fake loss: 0.4887673556804657; Discriminator total loss: 1.017679214477539;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 280: 13.334643125534058 sec
Generator loss: 1.6167023181915283; Discriminator real loss: 0.5294044613838196; Discriminator fake loss: 0.5010926723480225; Discriminator total loss: 1.0304970741271973;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 281: 13.339724063873291 sec
Generator loss: 1.5849523544311523; Discriminator real loss: 0.49582305550575256; Discriminator fake loss: 0.45784828066825867; Discriminator total loss: 0.9536713361740112;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 282: 13.338785886764526 sec
Generator loss: 1.5150444507598877; Discriminator real loss: 0.5220692753791809; Discriminator fake loss: 0.48915112018585205; Discriminator total loss: 1.0112204551696777;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 283: 13.351732015609741 sec
Generator loss: 1.4251272678375244; Discriminator real loss: 0.4941936433315277; Discriminator fake loss: 0.5546258687973022; Discriminator total loss: 1.0488195419311523;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 284: 13.375540971755981 sec
Generator loss: 1.7465944290161133; Discriminator real loss: 0.5075931549072266; Discriminator fake loss: 0.503831684589386; Discriminator total loss: 1.0114247798919678;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 285: 13.323523759841919 sec
Generator loss: 1.5522679090499878; Discriminator real loss: 0.4774479269981384; Discriminator fake loss: 0.4868941307067871; Discriminator total loss: 0.9643420577049255;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 286: 13.311716079711914 sec
Generator loss: 1.6458179950714111; Discriminator real loss: 0.5101633071899414; Discriminator fake loss: 0.503559410572052; Discriminator total loss: 1.0137226581573486;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 287: 13.343426704406738 sec
Generator loss: 1.451535701751709; Discriminator real loss: 0.46965888142585754; Discriminator fake loss: 0.53106689453125; Discriminator total loss: 1.0007257461547852;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 288: 13.350399494171143 sec
Generator loss: 1.595991611480713; Discriminator real loss: 0.5235714316368103; Discriminator fake loss: 0.5158355236053467; Discriminator total loss: 1.0394070148468018;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 289: 13.316677570343018 sec
Generator loss: 1.4209121465682983; Discriminator real loss: 0.49900874495506287; Discriminator fake loss: 0.48728418350219727; Discriminator total loss: 0.9862929582595825;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 290: 16.098751306533813 sec
Generator loss: 1.4131234884262085; Discriminator real loss: 0.4780607521533966; Discriminator fake loss: 0.49815624952316284; Discriminator total loss: 0.9762170314788818;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 291: 13.315788745880127 sec
Generator loss: 1.5790221691131592; Discriminator real loss: 0.5108487606048584; Discriminator fake loss: 0.5383089780807495; Discriminator total loss: 1.049157738685608;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 292: 13.343448638916016 sec
Generator loss: 1.5321694612503052; Discriminator real loss: 0.4739110469818115; Discriminator fake loss: 0.523758053779602; Discriminator total loss: 0.9976691007614136;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 293: 13.332734107971191 sec
Generator loss: 1.533543586730957; Discriminator real loss: 0.45938730239868164; Discriminator fake loss: 0.48971572518348694; Discriminator total loss: 0.9491029977798462;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 294: 13.349043846130371 sec
Generator loss: 1.2202011346817017; Discriminator real loss: 0.48706647753715515; Discriminator fake loss: 0.5229820609092712; Discriminator total loss: 1.010048508644104;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 295: 13.351905107498169 sec
Generator loss: 1.752837896347046; Discriminator real loss: 0.5170801877975464; Discriminator fake loss: 0.49325448274612427; Discriminator total loss: 1.0103347301483154;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 296: 13.351041316986084 sec
Generator loss: 1.5571911334991455; Discriminator real loss: 0.48328015208244324; Discriminator fake loss: 0.5051658749580383; Discriminator total loss: 0.9884459972381592;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 297: 13.381475448608398 sec
Generator loss: 1.2380298376083374; Discriminator real loss: 0.532512903213501; Discriminator fake loss: 0.5469755530357361; Discriminator total loss: 1.0794885158538818;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9453125; Discriminator total accuracy: 0.97265625

Time for epoch 298: 13.34428882598877 sec
Generator loss: 1.5469775199890137; Discriminator real loss: 0.5532897710800171; Discriminator fake loss: 0.5058055520057678; Discriminator total loss: 1.0590953826904297;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 299: 13.353861570358276 sec
Generator loss: 1.6567602157592773; Discriminator real loss: 0.4796992540359497; Discriminator fake loss: 0.47351741790771484; Discriminator total loss: 0.9532166719436646;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 300: 13.289973020553589 sec
Generator loss: 1.4937119483947754; Discriminator real loss: 0.5056565999984741; Discriminator fake loss: 0.5172849893569946; Discriminator total loss: 1.0229415893554688;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 301: 13.343717575073242 sec
Generator loss: 1.57832670211792; Discriminator real loss: 0.48241257667541504; Discriminator fake loss: 0.45600587129592896; Discriminator total loss: 0.938418447971344;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 302: 13.359506368637085 sec
Generator loss: 1.7917741537094116; Discriminator real loss: 0.48471981287002563; Discriminator fake loss: 0.48286545276641846; Discriminator total loss: 0.9675852656364441;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 303: 13.335946798324585 sec
Generator loss: 1.498279094696045; Discriminator real loss: 0.4992392361164093; Discriminator fake loss: 0.49995023012161255; Discriminator total loss: 0.9991894960403442;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 304: 13.340272665023804 sec
Generator loss: 1.4431778192520142; Discriminator real loss: 0.4767347276210785; Discriminator fake loss: 0.4983828365802765; Discriminator total loss: 0.975117564201355;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 305: 13.341863870620728 sec
Generator loss: 1.663809895515442; Discriminator real loss: 0.49481090903282166; Discriminator fake loss: 0.4936220645904541; Discriminator total loss: 0.9884330034255981;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 306: 13.339578628540039 sec
Generator loss: 1.5276312828063965; Discriminator real loss: 0.4401395320892334; Discriminator fake loss: 0.5023266077041626; Discriminator total loss: 0.942466139793396;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 307: 13.362027645111084 sec
Generator loss: 1.2407984733581543; Discriminator real loss: 0.4824712872505188; Discriminator fake loss: 0.5192124843597412; Discriminator total loss: 1.0016837120056152;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 308: 13.335209846496582 sec
Generator loss: 1.5721111297607422; Discriminator real loss: 0.46755462884902954; Discriminator fake loss: 0.5318570137023926; Discriminator total loss: 0.9994116425514221;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 309: 13.341224431991577 sec
Generator loss: 1.6980586051940918; Discriminator real loss: 0.49974602460861206; Discriminator fake loss: 0.4514862895011902; Discriminator total loss: 0.9512323141098022;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 310: 13.335413455963135 sec
Generator loss: 1.5769927501678467; Discriminator real loss: 0.48780500888824463; Discriminator fake loss: 0.5122179388999939; Discriminator total loss: 1.0000228881835938;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 311: 13.335373878479004 sec
Generator loss: 1.3896117210388184; Discriminator real loss: 0.5044874548912048; Discriminator fake loss: 0.5084456205368042; Discriminator total loss: 1.0129330158233643;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 312: 13.33550214767456 sec
Generator loss: 1.5747807025909424; Discriminator real loss: 0.5023983716964722; Discriminator fake loss: 0.5211621522903442; Discriminator total loss: 1.0235605239868164;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 313: 13.33513355255127 sec
Generator loss: 1.7128832340240479; Discriminator real loss: 0.4818843603134155; Discriminator fake loss: 0.49937206506729126; Discriminator total loss: 0.9812564253807068;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.984375

Time for epoch 314: 13.320539236068726 sec
Generator loss: 1.728024959564209; Discriminator real loss: 0.4816587269306183; Discriminator fake loss: 0.5076419115066528; Discriminator total loss: 0.9893006086349487;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 315: 13.323240041732788 sec
Generator loss: 1.0753188133239746; Discriminator real loss: 0.5436131954193115; Discriminator fake loss: 0.5670361518859863; Discriminator total loss: 1.1106493473052979;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.8828125; Discriminator total accuracy: 0.94140625

Time for epoch 316: 13.3037428855896 sec
Generator loss: 1.3882275819778442; Discriminator real loss: 0.49476784467697144; Discriminator fake loss: 0.5181649327278137; Discriminator total loss: 1.0129327774047852;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 317: 13.337535619735718 sec
Generator loss: 1.3675248622894287; Discriminator real loss: 0.5248578786849976; Discriminator fake loss: 0.48331063985824585; Discriminator total loss: 1.0081684589385986;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9609375; Discriminator total accuracy: 0.98046875

Time for epoch 318: 13.349457740783691 sec
Generator loss: 1.3979840278625488; Discriminator real loss: 0.4900321960449219; Discriminator fake loss: 0.5231339931488037; Discriminator total loss: 1.0131661891937256;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 319: 13.347212791442871 sec
Generator loss: 1.729413628578186; Discriminator real loss: 0.4889185130596161; Discriminator fake loss: 0.5060981512069702; Discriminator total loss: 0.9950166940689087;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 320: 13.333353519439697 sec
Generator loss: 1.6264007091522217; Discriminator real loss: 0.4968392550945282; Discriminator fake loss: 0.47603839635849; Discriminator total loss: 0.9728776216506958;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 321: 13.339863538742065 sec
Generator loss: 1.7694859504699707; Discriminator real loss: 0.5343438386917114; Discriminator fake loss: 0.5018824338912964; Discriminator total loss: 1.0362262725830078;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 322: 13.362105131149292 sec
Generator loss: 1.6699806451797485; Discriminator real loss: 0.5001088380813599; Discriminator fake loss: 0.48539113998413086; Discriminator total loss: 0.9854999780654907;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 323: 13.333285093307495 sec
Generator loss: 1.4961583614349365; Discriminator real loss: 0.4949178695678711; Discriminator fake loss: 0.4849868714809418; Discriminator total loss: 0.9799047708511353;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 324: 13.331767559051514 sec
Generator loss: 1.6842690706253052; Discriminator real loss: 0.4872463345527649; Discriminator fake loss: 0.4889238476753235; Discriminator total loss: 0.9761701822280884;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 325: 13.336648225784302 sec
Generator loss: 1.4891396760940552; Discriminator real loss: 0.4990946352481842; Discriminator fake loss: 0.5522294044494629; Discriminator total loss: 1.0513240098953247;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 326: 13.338995456695557 sec
Generator loss: 1.5813517570495605; Discriminator real loss: 0.5135982632637024; Discriminator fake loss: 0.45753687620162964; Discriminator total loss: 0.971135139465332;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 327: 13.284055948257446 sec
Generator loss: 1.5958423614501953; Discriminator real loss: 0.48096638917922974; Discriminator fake loss: 0.487125426530838; Discriminator total loss: 0.9680918455123901;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 328: 13.329947710037231 sec
Generator loss: 1.944943904876709; Discriminator real loss: 0.5483281016349792; Discriminator fake loss: 0.4827273190021515; Discriminator total loss: 1.0310554504394531;
Discriminator real accuracy: 0.953125; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9765625

Time for epoch 329: 13.328163146972656 sec
Generator loss: 1.6264288425445557; Discriminator real loss: 0.4758230745792389; Discriminator fake loss: 0.5201926231384277; Discriminator total loss: 0.9960156679153442;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 330: 13.332898616790771 sec
Generator loss: 1.5658884048461914; Discriminator real loss: 0.5349075794219971; Discriminator fake loss: 0.4843597114086151; Discriminator total loss: 1.0192673206329346;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 331: 13.351366758346558 sec
Generator loss: 1.6961030960083008; Discriminator real loss: 0.4876803457736969; Discriminator fake loss: 0.5363112688064575; Discriminator total loss: 1.023991584777832;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 332: 13.337454557418823 sec
Generator loss: 1.515064001083374; Discriminator real loss: 0.47299689054489136; Discriminator fake loss: 0.4796064794063568; Discriminator total loss: 0.9526033401489258;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 333: 13.316408395767212 sec
Generator loss: 1.4106531143188477; Discriminator real loss: 0.4863091707229614; Discriminator fake loss: 0.5096583366394043; Discriminator total loss: 0.9959675073623657;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 334: 13.35865831375122 sec
Generator loss: 1.5850541591644287; Discriminator real loss: 0.507949709892273; Discriminator fake loss: 0.5025416016578674; Discriminator total loss: 1.0104913711547852;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 335: 13.35721206665039 sec
Generator loss: 1.810876488685608; Discriminator real loss: 0.5217927694320679; Discriminator fake loss: 0.4949234127998352; Discriminator total loss: 1.0167162418365479;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 336: 13.390659093856812 sec
Generator loss: 1.6057093143463135; Discriminator real loss: 0.51373690366745; Discriminator fake loss: 0.4930591881275177; Discriminator total loss: 1.00679612159729;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 337: 13.352288961410522 sec
Generator loss: 1.4049620628356934; Discriminator real loss: 0.4692699611186981; Discriminator fake loss: 0.537689208984375; Discriminator total loss: 1.0069591999053955;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 338: 13.330511808395386 sec
Generator loss: 1.6074349880218506; Discriminator real loss: 0.4818904995918274; Discriminator fake loss: 0.4728185832500458; Discriminator total loss: 0.9547090530395508;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 339: 13.341532468795776 sec
Generator loss: 1.320753812789917; Discriminator real loss: 0.4605422019958496; Discriminator fake loss: 0.5341227650642395; Discriminator total loss: 0.9946649670600891;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 340: 13.334457874298096 sec
Generator loss: 1.6468849182128906; Discriminator real loss: 0.4972477853298187; Discriminator fake loss: 0.4883098006248474; Discriminator total loss: 0.9855575561523438;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 341: 13.299018383026123 sec
Generator loss: 1.7796720266342163; Discriminator real loss: 0.5087776780128479; Discriminator fake loss: 0.5078369379043579; Discriminator total loss: 1.0166146755218506;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 342: 13.337825536727905 sec
Generator loss: 1.6528295278549194; Discriminator real loss: 0.5296910405158997; Discriminator fake loss: 0.4501831531524658; Discriminator total loss: 0.9798741936683655;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 343: 13.310744762420654 sec
Generator loss: 1.7689621448516846; Discriminator real loss: 0.45992112159729004; Discriminator fake loss: 0.5230852365493774; Discriminator total loss: 0.9830063581466675;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 344: 13.319845199584961 sec
Generator loss: 1.6769955158233643; Discriminator real loss: 0.48036718368530273; Discriminator fake loss: 0.4421948492527008; Discriminator total loss: 0.9225620031356812;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 345: 13.309117078781128 sec
Generator loss: 1.879058837890625; Discriminator real loss: 0.5414707660675049; Discriminator fake loss: 0.4938029646873474; Discriminator total loss: 1.035273790359497;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 346: 13.330989360809326 sec
Generator loss: 1.5398393869400024; Discriminator real loss: 0.5147489309310913; Discriminator fake loss: 0.4801616668701172; Discriminator total loss: 0.9949105978012085;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 347: 13.337367296218872 sec
Generator loss: 1.6168537139892578; Discriminator real loss: 0.47690993547439575; Discriminator fake loss: 0.48420342803001404; Discriminator total loss: 0.9611133337020874;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 348: 13.335890531539917 sec
Generator loss: 1.5893990993499756; Discriminator real loss: 0.49104273319244385; Discriminator fake loss: 0.49096301198005676; Discriminator total loss: 0.9820057153701782;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 349: 13.369409799575806 sec
Generator loss: 1.8527581691741943; Discriminator real loss: 0.4941069781780243; Discriminator fake loss: 0.5275317430496216; Discriminator total loss: 1.0216387510299683;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 350: 13.301734924316406 sec
Generator loss: 1.7270593643188477; Discriminator real loss: 0.4922686219215393; Discriminator fake loss: 0.4880298972129822; Discriminator total loss: 0.9802985191345215;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 351: 13.335578918457031 sec
Generator loss: 1.732764482498169; Discriminator real loss: 0.49043774604797363; Discriminator fake loss: 0.496416836977005; Discriminator total loss: 0.9868545532226562;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 352: 13.360821723937988 sec
Generator loss: 1.574233055114746; Discriminator real loss: 0.5355839729309082; Discriminator fake loss: 0.4561619162559509; Discriminator total loss: 0.9917458891868591;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 353: 13.348354578018188 sec
Generator loss: 1.8453396558761597; Discriminator real loss: 0.4966759979724884; Discriminator fake loss: 0.48686355352401733; Discriminator total loss: 0.9835395812988281;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 354: 13.32841181755066 sec
Generator loss: 1.3697818517684937; Discriminator real loss: 0.555371880531311; Discriminator fake loss: 0.5305479168891907; Discriminator total loss: 1.0859198570251465;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 355: 13.339330434799194 sec
Generator loss: 1.901011347770691; Discriminator real loss: 0.5391769409179688; Discriminator fake loss: 0.5231440663337708; Discriminator total loss: 1.0623209476470947;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.984375

Time for epoch 356: 13.303616046905518 sec
Generator loss: 1.7155696153640747; Discriminator real loss: 0.5013253092765808; Discriminator fake loss: 0.4690921902656555; Discriminator total loss: 0.9704174995422363;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 357: 13.330884218215942 sec
Generator loss: 1.632411241531372; Discriminator real loss: 0.49725088477134705; Discriminator fake loss: 0.5107485055923462; Discriminator total loss: 1.0079994201660156;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 358: 13.336126565933228 sec
Generator loss: 1.505281686782837; Discriminator real loss: 0.5002709031105042; Discriminator fake loss: 0.5059260725975037; Discriminator total loss: 1.0061969757080078;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 359: 13.302882671356201 sec
Generator loss: 1.4960147142410278; Discriminator real loss: 0.5273541212081909; Discriminator fake loss: 0.4782187044620514; Discriminator total loss: 1.00557279586792;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9765625

Time for epoch 360: 13.333154678344727 sec
Generator loss: 1.6428916454315186; Discriminator real loss: 0.5001381635665894; Discriminator fake loss: 0.496672660112381; Discriminator total loss: 0.996810793876648;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 361: 13.327932834625244 sec
Generator loss: 1.7581137418746948; Discriminator real loss: 0.5130627155303955; Discriminator fake loss: 0.49168071150779724; Discriminator total loss: 1.0047434568405151;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 362: 13.367759227752686 sec
Generator loss: 1.640809178352356; Discriminator real loss: 0.49235284328460693; Discriminator fake loss: 0.4860961437225342; Discriminator total loss: 0.9784489870071411;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 363: 13.29945182800293 sec
Generator loss: 1.6277575492858887; Discriminator real loss: 0.5139791965484619; Discriminator fake loss: 0.5061196088790894; Discriminator total loss: 1.0200988054275513;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 364: 13.321895837783813 sec
Generator loss: 1.7362054586410522; Discriminator real loss: 0.49863678216934204; Discriminator fake loss: 0.5382338762283325; Discriminator total loss: 1.0368707180023193;
Discriminator real accuracy: 0.9609375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.98046875

Time for epoch 365: 16.867403507232666 sec
Generator loss: 1.7508690357208252; Discriminator real loss: 0.5123105049133301; Discriminator fake loss: 0.4792551100254059; Discriminator total loss: 0.9915655851364136;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 366: 13.33224368095398 sec
Generator loss: 1.4413888454437256; Discriminator real loss: 0.5369278192520142; Discriminator fake loss: 0.490466445684433; Discriminator total loss: 1.0273942947387695;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 367: 13.343852281570435 sec
Generator loss: 1.864688754081726; Discriminator real loss: 0.5197094678878784; Discriminator fake loss: 0.5003669261932373; Discriminator total loss: 1.0200763940811157;
Discriminator real accuracy: 0.96875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.984375

Time for epoch 368: 13.324943542480469 sec
Generator loss: 1.6519873142242432; Discriminator real loss: 0.5049843192100525; Discriminator fake loss: 0.45007818937301636; Discriminator total loss: 0.9550625085830688;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 369: 13.381057977676392 sec
Generator loss: 1.3579075336456299; Discriminator real loss: 0.528562605381012; Discriminator fake loss: 0.4832162857055664; Discriminator total loss: 1.0117788314819336;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 370: 13.344756364822388 sec
Generator loss: 1.5267324447631836; Discriminator real loss: 0.4809240996837616; Discriminator fake loss: 0.4860444664955139; Discriminator total loss: 0.9669685363769531;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 371: 13.338939428329468 sec
Generator loss: 1.6770415306091309; Discriminator real loss: 0.539054811000824; Discriminator fake loss: 0.5024160146713257; Discriminator total loss: 1.0414707660675049;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 372: 13.30750036239624 sec
Generator loss: 1.392815113067627; Discriminator real loss: 0.5311123132705688; Discriminator fake loss: 0.5264827609062195; Discriminator total loss: 1.0575950145721436;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 373: 13.345846176147461 sec
Generator loss: 1.5389999151229858; Discriminator real loss: 0.5114724636077881; Discriminator fake loss: 0.49474871158599854; Discriminator total loss: 1.0062211751937866;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 374: 13.367863178253174 sec
Generator loss: 1.652076005935669; Discriminator real loss: 0.49121296405792236; Discriminator fake loss: 0.46394890546798706; Discriminator total loss: 0.9551618695259094;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 375: 13.354424715042114 sec
Generator loss: 1.5784192085266113; Discriminator real loss: 0.5311819314956665; Discriminator fake loss: 0.5273232460021973; Discriminator total loss: 1.0585051774978638;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 376: 13.314038276672363 sec
Generator loss: 1.6013410091400146; Discriminator real loss: 0.4876248240470886; Discriminator fake loss: 0.49247926473617554; Discriminator total loss: 0.9801040887832642;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 377: 13.349349737167358 sec
Generator loss: 1.4648959636688232; Discriminator real loss: 0.4933323860168457; Discriminator fake loss: 0.5073773860931396; Discriminator total loss: 1.0007097721099854;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 378: 13.30960988998413 sec
Generator loss: 1.5342788696289062; Discriminator real loss: 0.49223485589027405; Discriminator fake loss: 0.5056641101837158; Discriminator total loss: 0.9978989362716675;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 379: 13.352684259414673 sec
Generator loss: 1.6024229526519775; Discriminator real loss: 0.4846160411834717; Discriminator fake loss: 0.44817084074020386; Discriminator total loss: 0.9327868819236755;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 380: 13.330744504928589 sec
Generator loss: 1.349477767944336; Discriminator real loss: 0.4616730213165283; Discriminator fake loss: 0.5231161117553711; Discriminator total loss: 0.9847891330718994;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.953125; Discriminator total accuracy: 0.9765625

Time for epoch 381: 13.34280252456665 sec
Generator loss: 1.7493178844451904; Discriminator real loss: 0.4657382369041443; Discriminator fake loss: 0.48191308975219727; Discriminator total loss: 0.9476513266563416;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 382: 13.369367837905884 sec
Generator loss: 1.6008325815200806; Discriminator real loss: 0.5181918740272522; Discriminator fake loss: 0.4537900686264038; Discriminator total loss: 0.971981942653656;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 383: 13.349825859069824 sec
Generator loss: 1.5204377174377441; Discriminator real loss: 0.5312374830245972; Discriminator fake loss: 0.47959792613983154; Discriminator total loss: 1.0108354091644287;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 384: 13.329259157180786 sec
Generator loss: 1.8873634338378906; Discriminator real loss: 0.5250935554504395; Discriminator fake loss: 0.4957999587059021; Discriminator total loss: 1.0208935737609863;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 385: 13.337831974029541 sec
Generator loss: 1.82723069190979; Discriminator real loss: 0.5019000768661499; Discriminator fake loss: 0.5338766574859619; Discriminator total loss: 1.0357767343521118;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 386: 13.328606128692627 sec
Generator loss: 1.7065460681915283; Discriminator real loss: 0.5042572021484375; Discriminator fake loss: 0.49780163168907166; Discriminator total loss: 1.0020588636398315;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 387: 13.354004144668579 sec
Generator loss: 1.5575740337371826; Discriminator real loss: 0.47794294357299805; Discriminator fake loss: 0.540499746799469; Discriminator total loss: 1.0184426307678223;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 388: 13.341067790985107 sec
Generator loss: 1.6069122552871704; Discriminator real loss: 0.4928227663040161; Discriminator fake loss: 0.5217823386192322; Discriminator total loss: 1.0146050453186035;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 389: 13.335722923278809 sec
Generator loss: 1.5275033712387085; Discriminator real loss: 0.5107269287109375; Discriminator fake loss: 0.5009510517120361; Discriminator total loss: 1.0116779804229736;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 390: 13.316072940826416 sec
Generator loss: 1.623318076133728; Discriminator real loss: 0.46466773748397827; Discriminator fake loss: 0.44747206568717957; Discriminator total loss: 0.9121397733688354;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 391: 13.353967189788818 sec
Generator loss: 1.5160452127456665; Discriminator real loss: 0.48955538868904114; Discriminator fake loss: 0.4963083863258362; Discriminator total loss: 0.9858638048171997;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 392: 13.315293788909912 sec
Generator loss: 1.5000075101852417; Discriminator real loss: 0.4750141203403473; Discriminator fake loss: 0.506528377532959; Discriminator total loss: 0.9815424680709839;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 393: 13.322618961334229 sec
Generator loss: 1.5961251258850098; Discriminator real loss: 0.4752749800682068; Discriminator fake loss: 0.5060985684394836; Discriminator total loss: 0.9813735485076904;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 394: 13.353579759597778 sec
Generator loss: 1.443193793296814; Discriminator real loss: 0.4883425235748291; Discriminator fake loss: 0.4784442186355591; Discriminator total loss: 0.9667867422103882;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 395: 13.39249324798584 sec
Generator loss: 1.6792123317718506; Discriminator real loss: 0.48729801177978516; Discriminator fake loss: 0.4791983366012573; Discriminator total loss: 0.9664963483810425;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 396: 13.321621656417847 sec
Generator loss: 1.4540865421295166; Discriminator real loss: 0.5173273086547852; Discriminator fake loss: 0.5037073493003845; Discriminator total loss: 1.0210347175598145;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 397: 13.3253755569458 sec
Generator loss: 1.660620927810669; Discriminator real loss: 0.4823426604270935; Discriminator fake loss: 0.5458411574363708; Discriminator total loss: 1.0281838178634644;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 398: 13.342210531234741 sec
Generator loss: 1.766046404838562; Discriminator real loss: 0.489313006401062; Discriminator fake loss: 0.47649356722831726; Discriminator total loss: 0.9658066034317017;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 399: 13.350053787231445 sec
Generator loss: 1.712647795677185; Discriminator real loss: 0.49399805068969727; Discriminator fake loss: 0.46964579820632935; Discriminator total loss: 0.9636438488960266;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 400: 13.343523979187012 sec
Generator loss: 1.7232813835144043; Discriminator real loss: 0.4652180075645447; Discriminator fake loss: 0.49673426151275635; Discriminator total loss: 0.961952269077301;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 401: 13.354984521865845 sec
Generator loss: 1.5787148475646973; Discriminator real loss: 0.5126920938491821; Discriminator fake loss: 0.4933432638645172; Discriminator total loss: 1.006035327911377;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 402: 13.32615351676941 sec
Generator loss: 1.361524224281311; Discriminator real loss: 0.5264851450920105; Discriminator fake loss: 0.49540820717811584; Discriminator total loss: 1.0218933820724487;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 403: 13.342612266540527 sec
Generator loss: 1.70967698097229; Discriminator real loss: 0.4854736328125; Discriminator fake loss: 0.50943523645401; Discriminator total loss: 0.99490886926651;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 404: 13.344059705734253 sec
Generator loss: 1.7123022079467773; Discriminator real loss: 0.4877634048461914; Discriminator fake loss: 0.5014724731445312; Discriminator total loss: 0.9892358779907227;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 405: 13.341203451156616 sec
Generator loss: 1.4871872663497925; Discriminator real loss: 0.47879758477211; Discriminator fake loss: 0.4834616184234619; Discriminator total loss: 0.9622591733932495;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 406: 13.346295356750488 sec
Generator loss: 1.5372134447097778; Discriminator real loss: 0.488465279340744; Discriminator fake loss: 0.507455050945282; Discriminator total loss: 0.9959203004837036;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 407: 13.378183364868164 sec
Generator loss: 1.6303229331970215; Discriminator real loss: 0.4881651997566223; Discriminator fake loss: 0.4553678035736084; Discriminator total loss: 0.9435330033302307;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 408: 13.383577108383179 sec
Generator loss: 1.429595947265625; Discriminator real loss: 0.4451957046985626; Discriminator fake loss: 0.5292267799377441; Discriminator total loss: 0.9744224548339844;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 409: 13.366666793823242 sec
Generator loss: 1.8594553470611572; Discriminator real loss: 0.519478440284729; Discriminator fake loss: 0.46002882719039917; Discriminator total loss: 0.9795072674751282;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 410: 13.350935459136963 sec
Generator loss: 1.6130094528198242; Discriminator real loss: 0.4719293713569641; Discriminator fake loss: 0.46845513582229614; Discriminator total loss: 0.9403845071792603;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.9921875

Time for epoch 411: 13.309014797210693 sec
Generator loss: 1.4299510717391968; Discriminator real loss: 0.4809800982475281; Discriminator fake loss: 0.5135987997055054; Discriminator total loss: 0.9945788979530334;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 412: 13.344735622406006 sec
Generator loss: 1.4651572704315186; Discriminator real loss: 0.5103728771209717; Discriminator fake loss: 0.5562496781349182; Discriminator total loss: 1.0666224956512451;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 413: 13.29735255241394 sec
Generator loss: 1.6636619567871094; Discriminator real loss: 0.5052043795585632; Discriminator fake loss: 0.4542222321033478; Discriminator total loss: 0.9594266414642334;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 414: 13.329829692840576 sec
Generator loss: 1.8243494033813477; Discriminator real loss: 0.5019549131393433; Discriminator fake loss: 0.43885859847068787; Discriminator total loss: 0.9408135414123535;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 415: 13.339983463287354 sec
Generator loss: 1.517871379852295; Discriminator real loss: 0.48128068447113037; Discriminator fake loss: 0.471856951713562; Discriminator total loss: 0.9531376361846924;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9765625; Discriminator total accuracy: 0.98828125

Time for epoch 416: 13.340227842330933 sec
Generator loss: 1.6500859260559082; Discriminator real loss: 0.47630971670150757; Discriminator fake loss: 0.4644426107406616; Discriminator total loss: 0.9407523274421692;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 417: 13.342985391616821 sec
Generator loss: 1.4179813861846924; Discriminator real loss: 0.47257113456726074; Discriminator fake loss: 0.49948015809059143; Discriminator total loss: 0.9720512628555298;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 418: 13.345798015594482 sec
Generator loss: 1.700610876083374; Discriminator real loss: 0.4820359945297241; Discriminator fake loss: 0.4715736508369446; Discriminator total loss: 0.9536096453666687;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 419: 13.36032485961914 sec
Generator loss: 1.6355522871017456; Discriminator real loss: 0.4873120188713074; Discriminator fake loss: 0.5134795904159546; Discriminator total loss: 1.0007915496826172;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 420: 13.354224681854248 sec
Generator loss: 1.2953234910964966; Discriminator real loss: 0.4908429682254791; Discriminator fake loss: 0.5261393785476685; Discriminator total loss: 1.0169823169708252;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 421: 13.379036664962769 sec
Generator loss: 1.597966194152832; Discriminator real loss: 0.5054840445518494; Discriminator fake loss: 0.47490814328193665; Discriminator total loss: 0.9803922176361084;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 422: 13.348570346832275 sec
Generator loss: 1.7550230026245117; Discriminator real loss: 0.5139811635017395; Discriminator fake loss: 0.46286725997924805; Discriminator total loss: 0.9768484234809875;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 423: 13.308482885360718 sec
Generator loss: 1.5128285884857178; Discriminator real loss: 0.49418097734451294; Discriminator fake loss: 0.5374757051467896; Discriminator total loss: 1.0316567420959473;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 424: 13.326690912246704 sec
Generator loss: 1.627358317375183; Discriminator real loss: 0.4980320334434509; Discriminator fake loss: 0.47970736026763916; Discriminator total loss: 0.9777393937110901;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 425: 13.34690237045288 sec
Generator loss: 1.811187982559204; Discriminator real loss: 0.5196391344070435; Discriminator fake loss: 0.5038197636604309; Discriminator total loss: 1.0234589576721191;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 426: 13.346529960632324 sec
Generator loss: 1.4802792072296143; Discriminator real loss: 0.46374502778053284; Discriminator fake loss: 0.5063533782958984; Discriminator total loss: 0.9700983762741089;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 427: 13.346946001052856 sec
Generator loss: 1.515633463859558; Discriminator real loss: 0.47600942850112915; Discriminator fake loss: 0.50736004114151; Discriminator total loss: 0.9833694696426392;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 428: 13.348265647888184 sec
Generator loss: 1.7737289667129517; Discriminator real loss: 0.4845343828201294; Discriminator fake loss: 0.4702123999595642; Discriminator total loss: 0.9547467827796936;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 429: 13.337871313095093 sec
Generator loss: 1.7127386331558228; Discriminator real loss: 0.5449509620666504; Discriminator fake loss: 0.48391029238700867; Discriminator total loss: 1.0288612842559814;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 430: 13.336775779724121 sec
Generator loss: 1.6334620714187622; Discriminator real loss: 0.4713110327720642; Discriminator fake loss: 0.49018925428390503; Discriminator total loss: 0.9615002870559692;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 431: 13.34505319595337 sec
Generator loss: 1.9377729892730713; Discriminator real loss: 0.5491583347320557; Discriminator fake loss: 0.4572426676750183; Discriminator total loss: 1.0064010620117188;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 432: 13.329025983810425 sec
Generator loss: 1.7905433177947998; Discriminator real loss: 0.48754483461380005; Discriminator fake loss: 0.48244574666023254; Discriminator total loss: 0.969990611076355;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 433: 13.345215797424316 sec
Generator loss: 1.6492830514907837; Discriminator real loss: 0.46793317794799805; Discriminator fake loss: 0.5372649431228638; Discriminator total loss: 1.0051981210708618;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 434: 13.397094249725342 sec
Generator loss: 1.5942268371582031; Discriminator real loss: 0.49439331889152527; Discriminator fake loss: 0.5100035667419434; Discriminator total loss: 1.004396915435791;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 435: 13.33696985244751 sec
Generator loss: 1.5148544311523438; Discriminator real loss: 0.494281530380249; Discriminator fake loss: 0.5106070041656494; Discriminator total loss: 1.0048885345458984;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 436: 13.322357892990112 sec
Generator loss: 1.637587070465088; Discriminator real loss: 0.4918022155761719; Discriminator fake loss: 0.507145881652832; Discriminator total loss: 0.9989480972290039;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 437: 13.346495866775513 sec
Generator loss: 1.6420131921768188; Discriminator real loss: 0.4954265356063843; Discriminator fake loss: 0.48706087470054626; Discriminator total loss: 0.9824874401092529;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 438: 13.333648681640625 sec
Generator loss: 1.752730369567871; Discriminator real loss: 0.47107231616973877; Discriminator fake loss: 0.4512431025505066; Discriminator total loss: 0.9223154187202454;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 439: 13.342033863067627 sec
Generator loss: 1.6476051807403564; Discriminator real loss: 0.47485053539276123; Discriminator fake loss: 0.4958873689174652; Discriminator total loss: 0.9707379341125488;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 440: 13.320774793624878 sec
Generator loss: 1.5846949815750122; Discriminator real loss: 0.4898599088191986; Discriminator fake loss: 0.5035591125488281; Discriminator total loss: 0.9934190511703491;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 441: 13.326047897338867 sec
Generator loss: 1.551855444908142; Discriminator real loss: 0.5036901235580444; Discriminator fake loss: 0.48243778944015503; Discriminator total loss: 0.9861279129981995;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 442: 13.340535402297974 sec
Generator loss: 1.5665168762207031; Discriminator real loss: 0.465933620929718; Discriminator fake loss: 0.507093071937561; Discriminator total loss: 0.973026692867279;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 443: 13.34405779838562 sec
Generator loss: 1.6374694108963013; Discriminator real loss: 0.5229779481887817; Discriminator fake loss: 0.47885242104530334; Discriminator total loss: 1.0018303394317627;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 444: 13.357351779937744 sec
Generator loss: 1.4651618003845215; Discriminator real loss: 0.5093287229537964; Discriminator fake loss: 0.5248522162437439; Discriminator total loss: 1.0341808795928955;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 445: 13.323456048965454 sec
Generator loss: 1.6047238111495972; Discriminator real loss: 0.4492819905281067; Discriminator fake loss: 0.4452369511127472; Discriminator total loss: 0.8945189714431763;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 446: 13.34469199180603 sec
Generator loss: 1.6739567518234253; Discriminator real loss: 0.48040953278541565; Discriminator fake loss: 0.503952145576477; Discriminator total loss: 0.9843616485595703;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 447: 13.3632173538208 sec
Generator loss: 1.4898200035095215; Discriminator real loss: 0.48726022243499756; Discriminator fake loss: 0.5133248567581177; Discriminator total loss: 1.0005850791931152;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 448: 13.317847728729248 sec
Generator loss: 1.51145339012146; Discriminator real loss: 0.5060215592384338; Discriminator fake loss: 0.5101204514503479; Discriminator total loss: 1.0161420106887817;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 449: 13.371221542358398 sec
Generator loss: 1.4005650281906128; Discriminator real loss: 0.4925687909126282; Discriminator fake loss: 0.5021865963935852; Discriminator total loss: 0.9947553873062134;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.9921875; Discriminator total accuracy: 0.99609375

Time for epoch 450: 13.332199096679688 sec
Generator loss: 1.5629713535308838; Discriminator real loss: 0.52525395154953; Discriminator fake loss: 0.46426576375961304; Discriminator total loss: 0.9895197153091431;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 451: 13.358988046646118 sec
Generator loss: 1.4879542589187622; Discriminator real loss: 0.5126692652702332; Discriminator fake loss: 0.4976295828819275; Discriminator total loss: 1.0102988481521606;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 452: 13.338580131530762 sec
Generator loss: 1.6286144256591797; Discriminator real loss: 0.4658811390399933; Discriminator fake loss: 0.4633170962333679; Discriminator total loss: 0.9291982650756836;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 453: 13.33495807647705 sec
Generator loss: 1.5343165397644043; Discriminator real loss: 0.5394427180290222; Discriminator fake loss: 0.5027315616607666; Discriminator total loss: 1.0421743392944336;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 454: 13.294469356536865 sec
Generator loss: 1.987404704093933; Discriminator real loss: 0.5351826548576355; Discriminator fake loss: 0.5205260515213013; Discriminator total loss: 1.055708646774292;
Discriminator real accuracy: 0.9765625; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.98828125

Time for epoch 455: 13.34670877456665 sec
Generator loss: 1.6303035020828247; Discriminator real loss: 0.48617106676101685; Discriminator fake loss: 0.4982146918773651; Discriminator total loss: 0.9843857288360596;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 456: 13.33616828918457 sec
Generator loss: 1.5291025638580322; Discriminator real loss: 0.5026960372924805; Discriminator fake loss: 0.48640263080596924; Discriminator total loss: 0.9890986680984497;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 457: 17.79088258743286 sec
Generator loss: 1.7947691679000854; Discriminator real loss: 0.4883789122104645; Discriminator fake loss: 0.45063748955726624; Discriminator total loss: 0.9390164017677307;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 458: 13.34688925743103 sec
Generator loss: 1.6975440979003906; Discriminator real loss: 0.4629670977592468; Discriminator fake loss: 0.4685477912425995; Discriminator total loss: 0.9315148591995239;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 459: 13.306547164916992 sec
Generator loss: 1.5064195394515991; Discriminator real loss: 0.4968359172344208; Discriminator fake loss: 0.4810759425163269; Discriminator total loss: 0.9779118299484253;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 460: 13.329896211624146 sec
Generator loss: 1.6062382459640503; Discriminator real loss: 0.4954996109008789; Discriminator fake loss: 0.4988163411617279; Discriminator total loss: 0.9943159818649292;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 461: 13.330352783203125 sec
Generator loss: 1.6723624467849731; Discriminator real loss: 0.4906400442123413; Discriminator fake loss: 0.4863714277744293; Discriminator total loss: 0.9770114421844482;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 462: 13.343817949295044 sec
Generator loss: 1.689918875694275; Discriminator real loss: 0.520134449005127; Discriminator fake loss: 0.4966124892234802; Discriminator total loss: 1.016746997833252;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 463: 13.315471649169922 sec
Generator loss: 1.4570293426513672; Discriminator real loss: 0.50532066822052; Discriminator fake loss: 0.4935884475708008; Discriminator total loss: 0.9989091157913208;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 464: 13.331949472427368 sec
Generator loss: 1.7429835796356201; Discriminator real loss: 0.4599947929382324; Discriminator fake loss: 0.4684695601463318; Discriminator total loss: 0.9284643530845642;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 465: 13.334155082702637 sec
Generator loss: 1.7170531749725342; Discriminator real loss: 0.497098833322525; Discriminator fake loss: 0.4951342046260834; Discriminator total loss: 0.9922330379486084;
Discriminator real accuracy: 0.984375; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.9921875

Time for epoch 466: 13.326753377914429 sec
Generator loss: 1.6270287036895752; Discriminator real loss: 0.4826902151107788; Discriminator fake loss: 0.49275004863739014; Discriminator total loss: 0.975440263748169;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 467: 13.309611797332764 sec
Generator loss: 1.5302128791809082; Discriminator real loss: 0.49750810861587524; Discriminator fake loss: 0.5268015265464783; Discriminator total loss: 1.0243096351623535;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 468: 13.363971471786499 sec
Generator loss: 1.6629079580307007; Discriminator real loss: 0.5080034136772156; Discriminator fake loss: 0.5027531981468201; Discriminator total loss: 1.0107566118240356;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 469: 13.346160650253296 sec
Generator loss: 1.5586310625076294; Discriminator real loss: 0.49213168025016785; Discriminator fake loss: 0.49232763051986694; Discriminator total loss: 0.9844592809677124;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 470: 13.3364999294281 sec
Generator loss: 1.4441261291503906; Discriminator real loss: 0.47684064507484436; Discriminator fake loss: 0.5006447434425354; Discriminator total loss: 0.9774854183197021;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 471: 13.304143190383911 sec
Generator loss: 1.544981598854065; Discriminator real loss: 0.5254707336425781; Discriminator fake loss: 0.4952037036418915; Discriminator total loss: 1.020674467086792;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 472: 13.311813116073608 sec
Generator loss: 1.5988234281539917; Discriminator real loss: 0.46118587255477905; Discriminator fake loss: 0.47542309761047363; Discriminator total loss: 0.9366089701652527;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 473: 13.395458221435547 sec
Generator loss: 1.8815668821334839; Discriminator real loss: 0.48382073640823364; Discriminator fake loss: 0.523157000541687; Discriminator total loss: 1.0069777965545654;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 474: 13.355020999908447 sec
Generator loss: 1.3690956830978394; Discriminator real loss: 0.532940685749054; Discriminator fake loss: 0.5127114653587341; Discriminator total loss: 1.045652151107788;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.96875; Discriminator total accuracy: 0.984375

Time for epoch 475: 13.314054012298584 sec
Generator loss: 1.7401338815689087; Discriminator real loss: 0.49402740597724915; Discriminator fake loss: 0.47133177518844604; Discriminator total loss: 0.9653592109680176;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 476: 13.354305744171143 sec
Generator loss: 1.6854426860809326; Discriminator real loss: 0.4764779508113861; Discriminator fake loss: 0.4937276542186737; Discriminator total loss: 0.9702056050300598;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 477: 13.35628056526184 sec
Generator loss: 1.7495461702346802; Discriminator real loss: 0.4652513861656189; Discriminator fake loss: 0.4588191509246826; Discriminator total loss: 0.9240705370903015;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 478: 13.329588174819946 sec
Generator loss: 1.6263693571090698; Discriminator real loss: 0.47662296891212463; Discriminator fake loss: 0.46101438999176025; Discriminator total loss: 0.9376373291015625;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 479: 13.289499044418335 sec
Generator loss: 1.2925586700439453; Discriminator real loss: 0.5064886808395386; Discriminator fake loss: 0.5234889388084412; Discriminator total loss: 1.029977560043335;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.98828125

Time for epoch 480: 13.330474615097046 sec
Generator loss: 1.721623182296753; Discriminator real loss: 0.5111854672431946; Discriminator fake loss: 0.45575740933418274; Discriminator total loss: 0.9669429063796997;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 481: 13.334264755249023 sec
Generator loss: 1.5494160652160645; Discriminator real loss: 0.46716344356536865; Discriminator fake loss: 0.4904210567474365; Discriminator total loss: 0.9575845003128052;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 482: 13.34989309310913 sec
Generator loss: 1.3105082511901855; Discriminator real loss: 0.465758353471756; Discriminator fake loss: 0.5428762435913086; Discriminator total loss: 1.0086345672607422;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 483: 13.337610721588135 sec
Generator loss: 1.65680992603302; Discriminator real loss: 0.5030439496040344; Discriminator fake loss: 0.5163629055023193; Discriminator total loss: 1.019406795501709;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 484: 13.348970413208008 sec
Generator loss: 1.6418986320495605; Discriminator real loss: 0.4756699800491333; Discriminator fake loss: 0.5466412901878357; Discriminator total loss: 1.0223112106323242;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 485: 13.35911750793457 sec
Generator loss: 1.662139892578125; Discriminator real loss: 0.4794013500213623; Discriminator fake loss: 0.46131229400634766; Discriminator total loss: 0.94071364402771;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 486: 13.34419322013855 sec
Generator loss: 1.3162240982055664; Discriminator real loss: 0.4933059513568878; Discriminator fake loss: 0.5359470248222351; Discriminator total loss: 1.0292530059814453;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 487: 13.332613468170166 sec
Generator loss: 1.53633451461792; Discriminator real loss: 0.4868980348110199; Discriminator fake loss: 0.4962525963783264; Discriminator total loss: 0.9831506013870239;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 488: 13.35869550704956 sec
Generator loss: 1.5651988983154297; Discriminator real loss: 0.4879164397716522; Discriminator fake loss: 0.4862864911556244; Discriminator total loss: 0.9742029309272766;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 489: 13.317711353302002 sec
Generator loss: 1.7670228481292725; Discriminator real loss: 0.4985026717185974; Discriminator fake loss: 0.5058497190475464; Discriminator total loss: 1.004352331161499;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 490: 13.357668161392212 sec
Generator loss: 1.5793468952178955; Discriminator real loss: 0.5071046352386475; Discriminator fake loss: 0.4911152422428131; Discriminator total loss: 0.9982198476791382;
Discriminator real accuracy: 0.9921875; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 0.99609375

Time for epoch 491: 13.35257625579834 sec
Generator loss: 1.681283950805664; Discriminator real loss: 0.5207247734069824; Discriminator fake loss: 0.5284432172775269; Discriminator total loss: 1.0491679906845093;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 492: 13.314109802246094 sec
Generator loss: 1.6164896488189697; Discriminator real loss: 0.4929733872413635; Discriminator fake loss: 0.49072277545928955; Discriminator total loss: 0.9836961627006531;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 493: 13.340820789337158 sec
Generator loss: 1.4983181953430176; Discriminator real loss: 0.4738403260707855; Discriminator fake loss: 0.5007874965667725; Discriminator total loss: 0.9746278524398804;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 494: 13.337188959121704 sec
Generator loss: 1.7313930988311768; Discriminator real loss: 0.455003023147583; Discriminator fake loss: 0.4878478944301605; Discriminator total loss: 0.9428509473800659;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 495: 13.304145812988281 sec
Generator loss: 1.5378193855285645; Discriminator real loss: 0.47601255774497986; Discriminator fake loss: 0.4880720376968384; Discriminator total loss: 0.9640846252441406;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 496: 13.304349184036255 sec
Generator loss: 1.6403453350067139; Discriminator real loss: 0.5088496208190918; Discriminator fake loss: 0.4844864010810852; Discriminator total loss: 0.993336021900177;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 497: 13.338170289993286 sec
Generator loss: 1.44261634349823; Discriminator real loss: 0.5083998441696167; Discriminator fake loss: 0.5177273750305176; Discriminator total loss: 1.0261272192001343;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 0.984375; Discriminator total accuracy: 0.9921875

Time for epoch 498: 13.362562417984009 sec
Generator loss: 1.4700071811676025; Discriminator real loss: 0.5095526576042175; Discriminator fake loss: 0.48752641677856445; Discriminator total loss: 0.997079074382782;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 499: 13.37115740776062 sec
Generator loss: 1.4876227378845215; Discriminator real loss: 0.4844529628753662; Discriminator fake loss: 0.5095397233963013; Discriminator total loss: 0.9939926862716675;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Time for epoch 500: 13.316455841064453 sec
Generator loss: 1.7154995203018188; Discriminator real loss: 0.5091128349304199; Discriminator fake loss: 0.4931355118751526; Discriminator total loss: 1.0022482872009277;
Discriminator real accuracy: 1.0; Discriminator fake accuracy: 1.0; Discriminator total accuracy: 1.0

Total time: 112.54594083627065 min

TRAINING COMPLETED

Loss figure saved at:
assets\generated-media\2021-01-27T15-39-20+0100\figures\loss.png

Accuracy figure saved at:
assets\generated-media\2021-01-27T15-39-20+0100\figures\accuracy.png
In [87]:
# A GIF which shows the whole training progress is generated, saved and plotted after the completion of the training
generated_gif_file_url = os.path.join(generated_gifs_dir_url, 'pokegan.gif')
ImageController.save_gif(generated_images_dir_url, generated_gif_file_url)
ImageController.plot_gif(generated_gif_file_url)
Saved gif at: assets\generated-media\2021-01-27T15-39-20+0100\gifs\pokegan.gif
Out[87]:
In [88]:
if should_save_generator:
    SaveController.save_generator_model(generator, trained_generator_model_dir_url)
Saved the generator model in the directory:
../public

2.2.13. Auswertung

In dem generierten Gif kann man klar erkennen, dass der Generator häufig vorkommende Merkmale aus den Trainingsdaten erlernt. Zu diesen Merkmalen gehört bspw. dass der Hintergrund zweifarbig mit einem Farbübergang ist. Ein weiteres erlerntes Merkmal ist die Kontur von den Pokémon. Der Generator erlernt die Kontur eines Kopfes und teilweise die der Ohren und Arme. Er erlernt, dass die Pokémon immer nach rechts schauen. Zusätzlich erlernt er auch, dass die Pokémon Augen haben. Merkmale wie Mund und Nase kann man teilweise erkennen. Das könnte daran liegen, dass auch die Pokémon aus den Trainingsdaten sehr verschiedene Munde und Nasen haben. Merkmale, die nur selten bei den Pokémon vorkommen, wie z.B. Flügel oder Flossen werden nicht gelernt.
Als Metriken für die Performance der Modelle und deren Training verwenden wir den Wert der Kostenfunktion (Loss) für den Generator und Diskriminator und die Accuracy des Diskriminators. Die Accuracy gibt dabei an, zu welcher Wahrscheinlichkeit der Diskriminator richtig klassifiziert hat und wird unterteilt in die Wahrscheinlichkeit, dass er ein Bild des Generators richtig klassifiziert und ein Bild aus den Trainingsdaten richtig klassifiziert. Man kann an den beiden Diagrammen des Losses erkennen, dass der Diskriminator mit der Zeit immer besser wird und der Loss des Generators immer weiter steigt. Ab Epoch 250 convergen beide Modelle. Die Accuracy bestätigt den Verlauf, den wir in den Diagrammen für den Loss gesehen haben. Dem Diskriminator fällt es im Laufe des Trainings immer leichter fake von echten Bildern zu unterscheiden. Eine optimale Accuracy sollte bei einem GAN 0.5 sein. Dies würde bedeuten, dass der Diskriminator sich bei den Bildern nicht entscheiden kann und die Bilder des GANs genauso aussehen, wie die Trainingsbilder.

2.3. Probleme und Lösungen

Das Gleichgewicht zwischen Generator und Diskriminator (Accuracy=0.5) konnten wir leider trotz unterschiedlicher Hyperparameter, Architekturen und Funktionen nicht komplett erreichen. Es traten bei etlichen Versuchen immer verschiedenste Probleme auf. Die obige Implementation ist der Ansatz, der für uns die meisten Probleme lösen konnte und mitunter die besten Ergebnisse produziert. Die am häufigsten auftretenden Probleme waren:

  1. Mode Collapse:
    Ein typisches Problem, bei dem ein GAN für unterschiedliche Noise-Vektoren immer das gleiche Bild generiert. Dies trat bei uns vor allem dann auf, wenn die Architekturen des Generators und des Diskriminators zu verschieden waren (z.B. wenn der Diskriminator wesentlich weniger trainierbare Parameter hatte) oder wenn die Lernrate des Diskriminators zu gering war. In diesen Fällen war es für den Generator ein leichtes Spiel ein oder wenige Bilder zu finden, die den bestmöglichen Loss hatten und diese dann unabhängig vom Input immer zu generieren.
In [15]:
Image("assets/images/mode-collapse.png")
Out[15]:
  1. Fail to converge:
    Ein weiteres häufiges Problem, bei dem sich der Loss eines Netzwerks nicht stabilisiert. Typischerweise ist der Loss des Diskriminators relativ schnell nahe null und der Loss des Generators steigt immer weiter. In unserem Fall kam dies nur vor, wenn keine Maßnahmen für die Verlangsamung des Lernprozesses des Diskriminators getroffen wurden (i.e. Label Smoothing und Label Flipping, sowie Dropout Layer und Reduzierung der Lernrate des Diskriminators).
In [16]:
Image("assets/images/fail-to-converge.png")
Out[16]:
  1. Noise in den generierten Bildern:
    Ein weiteres interessantes Problem war, dass wir Noise in den generierten Bildern hatten. Dieses Problem lies sich lösen, indem die Lernrate des Diskriminators von 0.0002 runtergesetzt wurde oder indem die trainierbaren Parameter des Diskriminators runtergesetzt wurden (im Verhältnis weniger als die des Generators waren).
In [17]:
Image("assets/images/generator-noise.png")
Out[17]:

2.4. Projektmanagement

2.4.1. Aufgabenaufteilung

Zu Anfang des Projekt haben wir noch an zwei unterschiedlichen PCs gearbeitet und über GitLab das Projekt zwischen den PCs synchronisiert. Dies war jedoch in Bezug auf die Erstellung und das Trainieren der Modelle nicht die effizienteste Möglichkeit, da wir die generierten Daten nicht so einfach synchronisieren konnten, da diese häufig über mehrere Gigabytes groß waren. Die generierten Daten brauchten wir jedoch, um zu entscheiden, wie die Parameter und die Modelle in einem nächsten Schritt verändert werden sollten, um die Qualität der Modelle zu verbessern. Außerdem hatten beide PCs unterschiedliche Hardware verbaut, was z.B. einen Vergleich der Trainingsdauer zwischen verschiedenen Trainingseinheiten nicht möglich machte. Wir entschieden uns deshalb dafür alles über einen PC zu machen und gemeinsam über diesen an dem Notebook zu arbeiten. Für uns war dies kein Problem, da wir gemeinsam in einer WG wohnen. Die spätere Dokumentation des Codes und das Programmieren des Frontends lies sich dann wieder ohne Probleme gerecht aufteilen.

2.4.2. Zeitplanung

Anfangs stellten wir einen groben Zeitplan auf der beinhaltet hat wann welche, der am Anfang des Notebooks aufgezählten Ziele, erreicht werden sollten. So planten wir zunächst einige Wochen Zeit ein, die dafür reserviert waren sich mit dem Thema GAN auseinanderzusetzen, da wir zuvor noch nie etwas mit GANs gemacht haben. Daraufhin beinhaltete unser Zeitplan die erste Phase der Entwicklung, in der das Ziel war die beiden Modelle implementiert zu haben und erste generierte Pokémon zeigen zu können. Wir terminierten diese Phase bis Ende des Jahres 2020. Die dritte Phase beinhaltete die Fertigstellung des Codes, welche auf Mitte Januar 2021 terminiert wurde. Die letzte Phase beinhaltete dann, laut grober Zeitplanung, die Dokumentation des Codes und des Projekts und die Vorbereitung auf die Media Night (bis Anfang Februar). Falls dann noch Zeit übrig wäre, könnte man noch eine Website programmieren, über die man sich Pokémon generieren lassen könnte.
Während der Projektlaufzeit hielten wir uns stets an diesen groben Zeitplan und tauschten uns, da wir gemeinsam in einer WG wohnen, stets über den aktuellen Stand aus. Am Ende war es uns dadurch auch möglich, nachdem alle Muss-Ziele erreicht wurden, unser Kann-Ziel (die Website zu programmieren) noch umzusetzen.

2.5. Fazit

Ein GAN ist nicht leicht zu trainieren. Aufgrund der Tatsache, dass der Lernprozess dynamisch ist, sich die Ausgangslage jede Iteration sowohl für den Generator als auch für den Diskriminator verändert, ist es sehr schwierig ein stabiles Training zu erreichen. Auch wenn wir selbst in unserem Projekt kein perfektes Gleichgewicht zwischen den beiden Modellen schaffen konnten und es lediglich schafften den Lernprozess des Diskriminators soweit zu verlangsamen, dass der Generator nicht abgehängt wurde, ist es uns dennoch gelungen ein Modell zu kreieren, welches es möglich macht neue Pokèmon-artige Bilder zu erschaffen. Auf Basis dieser Bilder kann man nun mit ein wenig Kreativität Pokémon mit vollem Detailgrad erstellen.
Für uns bleibt das Thema GAN weiter sehr faszinierend. Wir sehen unsere erste praktische Erfahrung (mit diesem Projekt) in diesem potenzialreichen Feld der Künstlichen Intelligenz als großen Erfolg an, auf den sich zukünftig bauen lässt.
In Bezug auf das Projektmanagement lässt sich sagen, dass wir unter diesen Bedingungen (zwei Projektmitglieder in einer gemeinsamen WG) nichts an der oben beschriebenen Vorgehensweise verändern würden. Falls wir jedoch nicht nur zu zweit gewesen wären oder nicht gemeinsam an einem PC hätten arbeiten können, hätten wir eine ander Strategie wählen müssen.